我有以下问题:
我需要设置一个布尔值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
答案 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。