오라클의 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을 사용해 보았습니다. 똑같은 일이 항상 발생합니다. 나는 다양한 포럼에서 지금까지 읽은 내용에 기반한 드라이버라고 생각합니다. 그러나 확실하지 않습니다 ... 그리고 이것이 문제입니다 :존재하지 않는 행에 Oracle/OJDBC BLOB 업데이트 문제가 있습니까?
나는이 문장을 업데이트하여 업데이트 할 준비가되어 있습니다. 표에 존재하지 않습니다 기록 을 부여 어디 업데이트의 경우 테스트를했다
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킬로바이트 등) : 0 행이 업데이트
int no = pstmt.executeUpdate();
반환 조항이 존재하지 않는 WHERE에 정의 된 행을 고려 예상된다. 그러나, 압축 파일 (30, 40킬로바이트), executeUpdate의() 같이, 다양한 메시지와 함께 예외 : SQLException를 throw 조금 더 큰 경우 :
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로 반환한다는 것입니다.
아무도 이미이 이상한 동작을 경험했는지 궁금합니다.이 경우 우회하는 것이 있습니까? (명백한 것을 제외하고 - 그 행이 있는지 확인하기 :))
고마워. 나는이 그 당신이 연결되어있는 오라클 서버가 추락하기 때문에 (안 인스턴스)를 본 적이 때마다
어떤 JKD 버전을 사용하십니까? – Codo
jdk 1.6.0._21을 사용합니다. – Less
JDK 1.6에서는 ojdbc14.jar 대신 ojdbc6.jar를 사용해야합니다. – Codo