更新多行时出现 EOFException
EOFException when updating multiple rows
多列,多行table...在更新row/rows的cell/cells时......我逐行更新整个table(可能不是一种有效的方法)...在执行时我得到:
java.sql.SQLTransientConnectionException: connection exception:
connection failure: java.io.EOFException
EOFException 在我阅读时指的是数据流结束...它与我的代码有什么关系?
100 行,10 列,第 1 列是 IDENTITY,以 1 开头。
for(int persistRowNum=1;persitRowNum<100;persistRowNum++){
try{
resultSet.absolute(persistRowNum);
if((newByteArrayOne.lenght)>0){
resultSet.updateBytes(2,newByteArrayOne);
resultSet.updateRow();
}
else{
resultSet.updateBytes(2,resultSet.getBytes(2));
resultSet.updateRow();
}
}catch(SQLException e){
return;
}
try{
resultSet.absolute(persistRowNum);
if((newByteArrayTwo.length)>0){
resultSet.updateBytes(3,newByteArrayTwo);
resultSet.updateRow();
}
else{
resultSet.updateBytes(3,resultSet.getBytes(3));
resultSet.updateRow();
}
}catch(SQLException e){
return;
}
}
2 张图片,首先显示我在第 1 行和第 2 行的 4 个单元格中输入的数据。
执行后...在第 1 行中输入的数据未显示,而在第 2 行中输入的数据中仅显示 #3...更奇怪的是,执行后第 3 行已从 table 消失!
注意:persistRowNum 是 "ID" 列
最后是堆栈:
java.sql.SQLTransientConnectionException: connection exception: connection failure: java.io.EOFException
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.performUpdate(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.updateRow(Unknown Source)
at principal.PrincipalPageController.persistPrinStudTableChanges(PrincipalPageController.java:1077)
at principal.PrincipalPageController.access00(PrincipalPageController.java:47)
at principal.PrincipalPageController.handle(PrincipalPageController.java:1015)
at principal.PrincipalPageController.handle(PrincipalPageController.java:1011)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8863)
at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3876)
at javafx.graphics/javafx.scene.Scene$MouseHandler.access00(Scene.java:3604)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2613)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent(GlassViewEventHandler.java:434)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: org.hsqldb.HsqlException: connection exception: connection
failure: java.io.EOFException
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ClientConnection.execute(Unknown Source)
... 53 more
尽量避免对 ResultSet 的同一行进行多次更新
for(int persistRowNum=1;persitRowNum<100;persistRowNum++){
try{
resultSet.absolute(persistRowNum);
if((newByteArrayOne.lenght)>0){
resultSet.updateBytes(2,newByteArrayOne);
} else{
resultSet.updateBytes(2,resultSet.getBytes(2));
}
if((newByteArrayTwo.length)>0){
resultSet.updateBytes(3,newByteArrayTwo);
} else{
resultSet.updateBytes(3,resultSet.getBytes(3));
}
resultSet.updateRow();
}catch(SQLException e){
return;
}
}
多列,多行table...在更新row/rows的cell/cells时......我逐行更新整个table(可能不是一种有效的方法)...在执行时我得到:
java.sql.SQLTransientConnectionException: connection exception:
connection failure: java.io.EOFException
EOFException 在我阅读时指的是数据流结束...它与我的代码有什么关系?
100 行,10 列,第 1 列是 IDENTITY,以 1 开头。
for(int persistRowNum=1;persitRowNum<100;persistRowNum++){
try{
resultSet.absolute(persistRowNum);
if((newByteArrayOne.lenght)>0){
resultSet.updateBytes(2,newByteArrayOne);
resultSet.updateRow();
}
else{
resultSet.updateBytes(2,resultSet.getBytes(2));
resultSet.updateRow();
}
}catch(SQLException e){
return;
}
try{
resultSet.absolute(persistRowNum);
if((newByteArrayTwo.length)>0){
resultSet.updateBytes(3,newByteArrayTwo);
resultSet.updateRow();
}
else{
resultSet.updateBytes(3,resultSet.getBytes(3));
resultSet.updateRow();
}
}catch(SQLException e){
return;
}
}
2 张图片,首先显示我在第 1 行和第 2 行的 4 个单元格中输入的数据。 执行后...在第 1 行中输入的数据未显示,而在第 2 行中输入的数据中仅显示 #3...更奇怪的是,执行后第 3 行已从 table 消失!
注意:persistRowNum 是 "ID" 列
最后是堆栈:
java.sql.SQLTransientConnectionException: connection exception: connection failure: java.io.EOFException
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.performUpdate(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.updateRow(Unknown Source)
at principal.PrincipalPageController.persistPrinStudTableChanges(PrincipalPageController.java:1077)
at principal.PrincipalPageController.access00(PrincipalPageController.java:47)
at principal.PrincipalPageController.handle(PrincipalPageController.java:1015)
at principal.PrincipalPageController.handle(PrincipalPageController.java:1011)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8863)
at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3876)
at javafx.graphics/javafx.scene.Scene$MouseHandler.access00(Scene.java:3604)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2613)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent(GlassViewEventHandler.java:434)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: org.hsqldb.HsqlException: connection exception: connection
failure: java.io.EOFException
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ClientConnection.execute(Unknown Source)
... 53 more
尽量避免对 ResultSet 的同一行进行多次更新
for(int persistRowNum=1;persitRowNum<100;persistRowNum++){
try{
resultSet.absolute(persistRowNum);
if((newByteArrayOne.lenght)>0){
resultSet.updateBytes(2,newByteArrayOne);
} else{
resultSet.updateBytes(2,resultSet.getBytes(2));
}
if((newByteArrayTwo.length)>0){
resultSet.updateBytes(3,newByteArrayTwo);
} else{
resultSet.updateBytes(3,resultSet.getBytes(3));
}
resultSet.updateRow();
}catch(SQLException e){
return;
}
}