很简单的一段代码: ResultSet updateRs = stmt2.executeQuery(updateSqlTxt); if (updateRs.next()) { //Get new quantities and update the ResultSet int oldQty = updateRs.getInt(products_quantity); updateRs.updateInt(products_quantity, getSum(oldQty, qtyStr));
这个错误又是怎么产生的: An unexpected exception has been detected in native code outside the VM. Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6004B508 Function=kghalo+0x3C8Library=F:\oracle\ora81\bin\orageneric8.dllCurrent Java thread: at sun.jdbc.odbc.JdbcOdbc.setPos(Native Method) at sun.jdbc.odbc.JdbcOdbc.SQLSetPos(JdbcOdbc.java:4709) at sun.jdbc.odbc.JdbcOdbcResultSet.setPos(JdbcOdbcResultSet.java:5019) at sun.jdbc.odbc.JdbcOdbcResultSet.updateRow(JdbcOdbcResultSet.java:4053) at SaveOrders.main(SaveOrders.java:195)如果我一个update还没有提交,在对这个相同的记录select,然后update它, 最后一起提交可以吗?
两次update,数据库最后存在的是最后一次update的数据.
EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6004F1C1 这个莫名其妙的错误,为什么用updateInt就没有?同样的代码?
ResultSet updateRs = stmt2.executeQuery(updateSqlTxt);
if (updateRs.next()) {
//Get new quantities and update the ResultSet
int oldQty = updateRs.getInt(products_quantity);
updateRs.updateInt(products_quantity, getSum(oldQty, qtyStr));
float oldRev = updateRs.getFloat(products_total);
System.out.println(oldRev);
updateRs.updateFloat(products_total, getRev(oldRev, qtyStr, priceStr));
//Send the changes to the database
updateRs.updateRow();
}
其中:getRev返回一个float!
当将getRev该为int型,改用:updateInt时,就没有问题,
当改为thin方式连接数据库时,提示:不能更新只读的结果集……
而我的stmt2定义为:
Statement stmt2 = db.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
updateRs.getFloat("products_total");
这个地方应当没有错,products_quantity、products_total是两个String型的
变量,不是字段名。
当然,变量里放的是字段名!
.
.
.
updateRs.updateRow();
对于你的第二个问题:
当改为thin方式连接数据库时,
提示:不能更新只读的结果集……//应该你的查询语句是select * 吧?在使用updaterow 时不能用select *,必须列出所有要查字段而我的stmt2定义为:
Statement stmt2 = db.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
我是更新已存在的记录的字段,不是新插入一行。to: javafounder(漂流)
的确,我用的select * ,我改一下试试,
products_total定义为float型,就算updatedouble不行,可不能用updatefloat也不行啊!
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6004B508
Function=kghalo+0x3C8Library=F:\oracle\ora81\bin\orageneric8.dllCurrent Java thread:
at sun.jdbc.odbc.JdbcOdbc.setPos(Native Method)
at sun.jdbc.odbc.JdbcOdbc.SQLSetPos(JdbcOdbc.java:4709)
at sun.jdbc.odbc.JdbcOdbcResultSet.setPos(JdbcOdbcResultSet.java:5019)
at sun.jdbc.odbc.JdbcOdbcResultSet.updateRow(JdbcOdbcResultSet.java:4053)
at SaveOrders.main(SaveOrders.java:195)如果我一个update还没有提交,在对这个相同的记录select,然后update它,
最后一起提交可以吗?
这个莫名其妙的错误,为什么用updateInt就没有?同样的代码?