“通过Java进行SQL查询”;对空结果集的非法操作“;

“通过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 =

我正在打一个db电话,如下所示:

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()){”周围返回此异常“空结果集上的非法操作”。为什么即使在向表中插入值后仍返回空集?请提供帮助。谢谢。

这可能是因为光标处于打开状态。您必须先关闭第一个
语句
,然后再尝试第二个。
结果集
是连接的,当您关闭
语句时,它也会关闭。我看不到implem
db.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绝对不是这样做的。