【发布时间】:2014-10-28 20:30:51
【问题描述】:
我已阅读 stackoverflow(以及网络上的其他地方)上的所有“可更新”帖子,但无济于事。我的代码运行良好,然后它停止说结果集不可更新。这是我在 JDBC derby 数据库中使用的 4 个数据文件。这些文件都有密钥。我不知道还能去哪里看。我写了下面的测试代码来演示这个问题。
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
try {
String uName = "guest";
String uPass = "guest";
String host = "jdbc:derby://127.0.0.1:1527/erTracker";
Connection erTrackerCon = DriverManager.getConnection( host,uName,uPass );
// erTrackerCon.setAutoCommit(true);
milestonesStmt = erTrackerCon.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String SQL = "SELECT * FROM milestones order by milestoneID";
rsMilestones = milestonesStmt.executeQuery( SQL );
String a = "02";
String b = "M";
String c = "Move to prospect";
erTrackerCon.setReadOnly(false);
int concurrency = rsMilestones.getConcurrency();
System.out.println("the answer is " + concurrency); // the answer is 1007
rsMilestones.moveToInsertRow(); // error is: 'moveToInsertRow' not allowed because the ResultSet is not an updatable ResultSet.
rsMilestones.updateString("milestoneID", a);
rsMilestones.updateString("milestoneType",b);
rsMilestones.updateString("milestoneName", c);
rsMilestones.insertRow( );
//String SQL = "INSERT INTO milestones (milestoneid,milestonetype,milestongname) VALUES ('02','M','move to pursue')";
//rsMilestones = milestonesStmt.executeQuery( SQL );
}
catch ( SQLException err ) {
System.out.println( err.getMessage( ) );
}
}
【问题讨论】:
-
虽然有点跑题了,为什么不使用存储过程来实现您想要的结果,以便通过将参数从 Java 传递到数据库,所有选择查询和插入/更新都将成为后端存储过程的一部分过程。
-
您得到的确切异常是什么。您是否尝试过使用 ij 手动更新/插入?