我在往一个db2的BLOB型的字段存放大数据的时候,代码如下: myString是我从页面接收的大数据(40k以上)InputStream inputStream = new ByteArrayInputStream(myString.getBytes()); pstmt.setBinaryStream(8,inputStream,myString.length());以上的语句出错了。但是当我把myString设置成很小的时候以上的语句就是对的,也就是我就可以把myString插入到库中了!!!请大虾指点!!!!!!!
你使用getBytes时,设置chatset看看
如果你用是DB2 是不是你声明的容量小了吧。 (另:大字符串一般使用CLOB)
File file = new File("aaa.gif"); int fileLength =(int) file.length(); InputStream fin = new FileInputStream(file); PreparedStatement pstmt = con.prepareStatement("insert into tb_file values('aaa.gif',?)"); pstmt.setBinaryStream (1, fin, fileLength); pstmt.executeUpdate(); 以上是对大数据的操作的一个例子你可以仔细看Exception,DB2的BLOB操作我没有用过,但异常告诉我们是数据库操作的错误,你可以看看db2的 blob的值的范围
你是否可以把你的异常贴清楚一下以下是另外以为朋友的异常java.sql.SQLException: The stream contains more or less data than was specified at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters2(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute(Unknown Source) at WriteBlob.writePicture(WriteBlob.java:144) at WriteBlob.main(WriteBlob.java:171)出错在 DB2PreparedStatement.loadParameters2(Unknown Source)db2的clob,blob等大数据可以存储2gb的数据
谢谢各位!我的字段是blob型的,长度设置的是50mb,而我的string型的数据大概是4k。 我的异常如下::: [2004-08-05 22:09:14,703] Servlet.Engine.Transports : 0 com.sscm.pact.PactManager ERROR - ...update catch SQLException: java.sql.SQLException: The stream contains more or less data than was specified at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters2(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(Unknown Source) at com.sscm.pact.PactManager.update(PactManager.java:164) at org.apache.jsp._editStockPact._jspService(_editStockPact.java:265) at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)上面我是用log4j打印的出错信息!!
楼主说得对“The stream contains more or less data than was specified” 表示你插入或修改的信息内容已经超过了你数据库中的定义。 1、在你插入前,显示出你要插入的字串及其长度。看看究竟是啥(要老老实实地在插入语句前加印出语句,不要想当然认为,一般是由于逻辑上没有考虑到某些情况而使字串超长了) 2、是否涉及码制上的问题,一般编码方式不同,其字符长度会有变化。如一个中文需要两个字节,无形中将码制的长度翻了倍。
我的数据我打印出来存的时候是10k不到,但是字段的长度设置我是50m,所以应该不是这个问题,我觉得会不会是new ByteArrayInputStream(myString.getBytes());这里出问题了? 请大家会诊,会诊!! 这是我的原句:: InputStream inputStream = new ByteArrayInputStream(myString.getBytes()); pstmt.setBinaryStream(8,inputStream,myString.length());
inputStream的长度和myString.length()不匹配吧
Acylas(Acylas) 说的对 我的myString.length()这个长度应该修改为什么呢?????我做过测试,如果我插入的是"oooo"(都是英文),myString.length()=4,插入成功,但是我插入"娘的",myString.length()=2,插入操作失败。估计是因为汉字一个字站用两个字节的问题,但是,后来我把以上的语句修改为: InputStream inputStream = new ByteArrayInputStream(myString.getBytes()); pstmt.setBinaryStream(8,inputStream,(myString.getBytes()).length);(myString.getBytes()).length打印出4,即:(pact.getAffix().getBytes()).length=4但是这样修改以后还是插入失败!!!55555555555555555555555
因为我的yourStrnig如果很小的话比如是"jjjjj"的话就能成功插入的
myString是我从页面接收的大数据(40k以上)InputStream inputStream = new ByteArrayInputStream(myString.getBytes());
pstmt.setBinaryStream(8,inputStream,myString.length());以上的语句出错了。但是当我把myString设置成很小的时候以上的语句就是对的,也就是我就可以把myString插入到库中了!!!请大虾指点!!!!!!!
(另:大字符串一般使用CLOB)
int fileLength =(int) file.length();
InputStream fin = new FileInputStream(file);
PreparedStatement pstmt = con.prepareStatement("insert into tb_file values('aaa.gif',?)");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate(); 以上是对大数据的操作的一个例子你可以仔细看Exception,DB2的BLOB操作我没有用过,但异常告诉我们是数据库操作的错误,你可以看看db2的 blob的值的范围
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters2(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute(Unknown Source)
at WriteBlob.writePicture(WriteBlob.java:144)
at WriteBlob.main(WriteBlob.java:171)出错在 DB2PreparedStatement.loadParameters2(Unknown Source)db2的clob,blob等大数据可以存储2gb的数据
我的异常如下:::
[2004-08-05 22:09:14,703] Servlet.Engine.Transports : 0 com.sscm.pact.PactManager ERROR - ...update catch SQLException:
java.sql.SQLException: The stream contains more or less data than was specified
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters2(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.loadParameters(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(Unknown Source)
at com.sscm.pact.PactManager.update(PactManager.java:164)
at org.apache.jsp._editStockPact._jspService(_editStockPact.java:265)
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)上面我是用log4j打印的出错信息!!
表示你插入或修改的信息内容已经超过了你数据库中的定义。
1、在你插入前,显示出你要插入的字串及其长度。看看究竟是啥(要老老实实地在插入语句前加印出语句,不要想当然认为,一般是由于逻辑上没有考虑到某些情况而使字串超长了)
2、是否涉及码制上的问题,一般编码方式不同,其字符长度会有变化。如一个中文需要两个字节,无形中将码制的长度翻了倍。
请大家会诊,会诊!!
这是我的原句::
InputStream inputStream = new ByteArrayInputStream(myString.getBytes());
pstmt.setBinaryStream(8,inputStream,myString.length());
我的myString.length()这个长度应该修改为什么呢?????我做过测试,如果我插入的是"oooo"(都是英文),myString.length()=4,插入成功,但是我插入"娘的",myString.length()=2,插入操作失败。估计是因为汉字一个字站用两个字节的问题,但是,后来我把以上的语句修改为:
InputStream inputStream = new ByteArrayInputStream(myString.getBytes());
pstmt.setBinaryStream(8,inputStream,(myString.getBytes()).length);(myString.getBytes()).length打印出4,即:(pact.getAffix().getBytes()).length=4但是这样修改以后还是插入失败!!!55555555555555555555555
请问你那位朋友的异常后来是怎么解决的呢?