我在甲骨文上遇到了很奇怪的问题。我正在使用OracleXE 10g (10.2.0.1.0版本的数据库),并在ojdbc14_g驱动程序10.2.0.1.0、10.2.0.4.0和10.2.0.5.0中进行了尝试。同样的事情总是会发生。我想这是基于我在各种论坛上所读到的,但我不确定.这就是问题所在:
我有一段代码,准备语句来更新两个blobs,它们实际上是zip档案:
File fRst = new File("archive1.zip"); File fPro = new File("archive2.zip"); //... statement = "UPDATE CURR_STATE" + " SET ZIP_RST=?, ZIP_PRO=?" + " WHERE SERIAL_NUMBER=" + "'" + serialNo + "'" + " AND" + " YEAR_MONTH=" + "'" + yearMonth + "'"; pstmt = this.connection.prepareStatement(statement); FileInputStream isR = new FileInputStream(fRst); FileInputStream isP = new FileInputStream(fPro); pstmt.setBinaryStream(1, isR, (int) fRst.length()); pstmt.setBinaryStream(2, isP, (int) fPro.length()); int no = pstmt.executeUpdate(); System.out.println("rows: " + no); this.connection.commit(); pstmt.close();
我在测试给定记录 在表中不存在 的情况下的更新情况。如果这两个zip文件的大小较小(如2、5或10 or ),则行:
int no = pstmt.executeUpdate();
返回更新的0行,考虑到WHERE子句中定义的行不存在,这是预期的。但是,如果压缩文件稍微大一点(30,40 if ),executeUpdate()就会抛出带有各种消息的SQLException,例如:
java.sql.SQLException: Io exception: Software caused connection abort: socket write error at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)