gpt4 book ai didi

java - Oracle/OJDBC BLOB 在不存在的行上更新问题?

转载 作者:行者123 更新时间:2023-12-02 00:37:45 28 4
gpt4 key购买 nike

我在 Oracle 中遇到了关于 BLOB 的非常特殊的问题。我正在使用 OracleXE 10g(10.2.0.1.0 版本的数据库),并尝试使用 ojdbc14_g 驱动程序版本 10.2.0.1.0、10.2.0.4.0 和 10.2.0.5.0。同样的事情总是发生。根据我迄今为止在各个论坛上读到的内容,我认为这与驱动程序有关,但我不确定......这就是问题:

我有这段代码,它准备语句来更新两个 blob,它们实际上是 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 或 10KB),则行:

int no = pstmt.executeUpdate();

返回 0 行更新,考虑到 WHERE 子句中定义的行不存在,这是预期的。但是,如果 zip 文件稍大一些(30、40KB),executeUpdate() 会抛出 SQLException 并带有各种消息,例如:

java.sql.SQLException: Io exception: Software caused connection abort: socket write error
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:190)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:363)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1142)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1278)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3415)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3498)

java.sql.SQLException: No more data to read from socket 

java.sql.SQLException: OALL8 is in an inconsistent state 

这些异常有效地终止了底层套接字连接,因此它变得不可用。有趣的是,如果表中存在行,则一切正常,更新执行没有问题,返回 1 作为更新的行数。

我想知道是否有人已经遇到过这种奇怪的行为,是否有任何绕过方法? (除了明显的一个 - 检查该行是否存在:))

谢谢。

最佳答案

java.sql.SQLException:没有更多数据可从套接字读取

每当我看到这种情况时,都是因为您连接的 Oracle 服务器崩溃了(而不是实例)。

发生这种情况时您检查过警报日志吗?

关于java - Oracle/OJDBC BLOB 在不存在的行上更新问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com