我正在进行如下的数据库调用:
String sqlAlert = "SELECT * FROM demotable where demo_no ='"
+rsDemo.getString("demo_no") + "'";
ResultSet rsAlert = db.GetSQL(sqlAlert);
if (rsAlert.next()) {
String newAlert = rsAlert.getString("cust3")+"1";
String newAlertSql = "UPDATE demotable SET cust3 = '" + newAlert + "' where demo_no='" + rsDemo.getString("demo_no") + "'";
System.out.println("Update alert msg: " + newAlertSql);
db.RunSQL(newAlertSql);
} else {
System.out.println("empty result. Demo_no = "+rsDemo.getString("demo_no"));
String sqlAlertinsert = "INSERT INTO demotable VALUES('" + rsDemo.getString("demo_no") + "','','','','','<unotes></unotes>')";
db.RunSQL(sqlAlertinsert);
System.out.println("insert demo done");
String sqlAlert2 = "SELECT * FROM demotable where demo_no ='"rsDemo.getString("demo_no") + "'";
ResultSet rsAlert2 = db.GetSQL(sqlAlert2);
if (rsAlert2.next()) {
String newAlert = rsAlert2.getString("cust3")+"1";
String newAlertSql = "UPDATE demotable SET cust3 = '" + newAlert+ "' where demo_no='" + rsDemo.getString("demo_no") + "'";
System.out.println("Update alert msg: " + newAlertSql);
db.RunSQL(newAlertSql);
}
rsAlert2.close();
}
rsAlert.close();
rs.close();
如果rsAlert返回一个空集,然后从中访问值,我试图将行插入到demographiccust中。但我的代码在“if(rsAlert2.next()){”周围返回此异常“空结果集上的非法操作”。为什么即使在将值插入表中后它也返回空集?请帮忙。谢谢。
答案 0 :(得分:2)
可能是因为打开了光标。在尝试第二个之前,您必须关闭第一个Statement
。 ResultSet
是一个关联的东西,当你关闭Statement
它也会被关闭。我看不到您的db.RunSQL()
和db.GetSQL()
方法的实施情况。
但是,我首先要提出你应该如何做的建议。你去吧,
提示:
PreparedStatement
,而不是db.GetSQL()
不会返回SQL,而是反过来询问一个,实际上返回ResultSet
。 ResultSet
。这可能会导致代码膨胀和许多开放游标。不要让您的方法的用户关闭它。在您执行任何数据库查询的方法中自己关闭它,并将结果作为bean或bean列表返回。答案 1 :(得分:1)
这只是猜测,但是因为您直接将rsDemo.getString("demo_no")
插入到SQL中,所以您可能传递的SQL语句不是您想要的。尝试使用参数绑定api。