“通过Java进行SQL查询”;对空结果集的非法操作“;
我正在打一个db电话,如下所示:“通过Java进行SQL查询”;对空结果集的非法操作“;,java,jdbc,Java,Jdbc,我正在打一个db电话,如下所示: String sqlAlert = "SELECT * FROM demotable where demo_no ='" +rsDemo.getString("demo_no") + "'"; ResultSet rsAlert = db.GetSQL(sqlAlert); if (rsAlert.next()) { String newAlert =
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();
String sqlAlert=“从demo\u no=”处可降级选择*
+getString(“demo_no”)+“;
ResultSet rsAlert=db.GetSQL(sqlAlert);
if(rsAlert.next()){
String newAlert=rsAlert.getString(“cust3”)+“1”;
String newAlertSql=“更新可降级集cust3=”+newAlert+“,其中demo_no=”+rsDemo.getString(“demo_no”)+“;
System.out.println(“更新警报消息:+newAlertSql”);
RunSQL(newAlertSql);
}否则{
System.out.println(“空结果.Demo_no=“+rsDemo.getString(“Demo_no”));
String sqlAlertinsert=“插入到可降级的值中(“+rsDemo.getString(“demo_no”)+”、“”、“”、“”、“”、“”);
RunSQL(sqlAlertinsert);
System.out.println(“插入演示完成”);
String sqlAlert2=“从demo_no='”rsDemo.getString(“demo_no”)+“'”中可降级选择*;
ResultSet rsAlert2=db.GetSQL(sqlAlert2);
if(rsAlert2.next()){
String newAlert=rsAlert2.getString(“cust3”)+“1”;
String newAlertSql=“更新可降级集cust3=”+newAlert+“,其中demo_no=”+rsDemo.getString(“demo_no”)+“;
System.out.println(“更新警报消息:+newAlertSql”);
RunSQL(newAlertSql);
}
rsAlert2.close();
}
rsAlert.close();
rs.close();
如果rsAlert返回一个空集,然后从中访问值,我将尝试在demographiccust中插入行。但是我的代码在“if(rsAlert2.next()){”周围返回此异常“空结果集上的非法操作”。为什么即使在向表中插入值后仍返回空集?请提供帮助。谢谢。这可能是因为光标处于打开状态。您必须先关闭第一个
语句
,然后再尝试第二个。结果集
是连接的,当您关闭语句时,它也会关闭。我看不到implemdb.RunSQL()
和db.GetSQL()
方法的注释
不过,我有一个建议,首先是关于你应该怎么做。给你
在不查询数据库的情况下更新它
检查更新了多少行。如果没有,则完成步骤3,否则完成
首先插入具有正确值的记录。插入后无需更新
小贴士:
尝试使用,而不是
坚持
尝试使用有意义的名称,例如,您的方法db.GetSQL()
不是返回SQL,而是相反地询问SQL,实际上返回的是ResultSet
永远不要返回ResultSet
。这可能会导致代码膨胀和大量打开的游标。不要让方法的用户关闭它。请在执行任何数据库查询的方法中自己关闭它,并将结果作为bean或bean列表返回
这可能是因为打开了游标。您必须先关闭第一个语句
,然后再尝试第二个。ResultSet
是一个连接的东西,当您关闭语句时,它也会关闭。我看不到db.RunSQL()
和db.GetSQL()
方法的实现
不过,我有一个建议,首先是关于你应该怎么做。给你
在不查询数据库的情况下更新它
检查更新了多少行。如果没有,则完成步骤3,否则完成
首先插入具有正确值的记录。插入后无需更新
小贴士:
尝试使用,而不是
坚持
尝试使用有意义的名称,例如,您的方法db.GetSQL()
不是返回SQL,而是相反地询问SQL,实际上返回的是ResultSet
永远不要返回ResultSet
。这可能会导致代码膨胀和大量打开的游标。不要让方法的用户关闭它。请在执行任何数据库查询的方法中自己关闭它,并将结果作为bean或bean列表返回
这只是一个猜测,但是因为您正在将rsDemo.getString(“demo\u no”)
直接插入到SQL中,您可能正在传递一个不是您想要的SQL语句。请尝试使用参数绑定api。这只是一个猜测,但是因为您正在插入rsDemo.getString(“demo\u no”)
直接传递到SQL中,您可能传递的SQL语句不是您想要的。请尝试使用参数绑定api。检查db类中的代码。每个查询都应使用单独的语句来保存rs的结果。您是否可以尝试使代码更加自文档化…?无论如何,JDBC肯定不是这样的完成。检查数据库类中的代码。每个查询都应该使用单独的语句来保存rs的结果。您是否可以尝试使代码更自我记录…?无论如何,JDBC绝对不是这样做的。