【问题标题】:Set java variable depending on sql return value根据sql返回值设置java变量
【发布时间】:2016-10-12 10:11:49
【问题描述】:

我有以下问题:

我需要设置一个布尔值 true 是否存在数据库中的条目。

        ResultSet rc1 = null;
        int Counterval;
        String url = "jdbc:db2://localhost:50000/dbname"; 
        Connection conn = DriverManager.getConnection(url,"",""); 
        Statement st = conn.createStatement();
        String sqlmd="select count(*) as Counter from tablename where mdsum = '"+mdSum+"' and filename = '"+Filename+"'"; 

        rc1=st.executeQuery(sqlmd);
        Counterval=rc1.getInt("Counter");
        System.out.println("VAL: "+Counterval);
        conn.close(); 

我收到以下错误消息:

 [jcc][t4][1090][10899][4.19.26] Illigal operation to read at the current cursor position. ERRORCODE=-4476, SQLSTATE=02501

我该怎么做? 如果这很重要,我会使用 DB2

提前感谢您的帮助。

流浪汉

【问题讨论】:

  • 当您只是选择一组结果时,为什么要尝试执行更新?你为什么不尝试 executeUpdate ?

标签: java sql if-statement boolean


【解决方案1】:

我不知道您是否尝试过代码,但如果您尝试过,您会得到什么样的异常?

你应该尝试st.executeQuery而不是st.executeUpdate,然后比较count()函数的返回数是否大于0

编辑: 现在在您编辑的问题中看到您的例外:

ResultSet 游标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。

if (rc1.next()){
   booleanVariable = true;
}

这将在true 中设置布尔变量,如果变量resultSet (rc1) 正在返回一些东西,这意味着在数据库中有根据您所做的查询的数据。如果返回false,则为空。

希望对你有帮助。问候。

【讨论】:

    【解决方案2】:

    你应该先调用ResultSet.next()方法将光标移动到第一行。

    boolean check;
    String sqlmd="select count(*) as Counter from tablename where mdsum = '"+mdSum+"' and filename = '"+Filename+"'"; 
    
    rc1=st.executeQuery(sqlmd);
    rc1.next();
    Counterval=rc1.getInt("Counter");
    if(Counterval > 0){
     // do something
    }else{
     // do something
    }
    System.out.println("VAL: "+Counterval);
    

    根据下一个方法的docs——

    将光标从当前位置向前移动一行。一个 ResultSet 游标最初位于第一行之前;这 第一次调用 next 方法使第一行成为当前行;这 第二次调用使第二行成为当前行,依此类推。

    为了更好地理解,请阅读此answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      相关资源
      最近更新 更多