根据sql返回值设置java变量

时间:2016-10-12 10:11:49

标签: java sql if-statement boolean

我有以下问题:

我需要设置一个布尔值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

提前感谢您的帮助。

TheVagabond

2 个答案:

答案 0 :(得分:1)

我不知道你是否尝试过代码,但是如果你做了,你会得到什么样的例外?

您应该尝试使用st.executeQuery代替st.executeUpdate,然后只比较count()函数的返回数是否大于0

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

  

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

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

如果变量true返回某些内容,这将在resultSet (rc1)中设置布尔变量,这意味着在数据库中根据您所做的查询存在数据。如果它返回false则为空。

我希望它可以帮到你。迎接。

答案 1 :(得分:0)

您应首先调用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游标最初位于第一行之前;该   首先调用方法接下来使第一行成为当前行;该   第二次调用使第二行成为当前行,依此类推。

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