环境:
jdk1.6.0_12
mysql-connector-java-5.0.6-bin.jar程序:
.......
Statement stmt = myconn.createStatement();
ResultSet rs = stmt.executeQuery("select count(*) from mytable where my条件");
while (rs.next()) {
int count = rs.getInt(1);
}
.......
实际上我要通过count这个变量来判断表中有没有满足条件的数据,
有的话接下来执行更新操作
没有的话接下来执行插入操作
问题:
现在执行的时候偶然出现一次count变量和表中的满足条件的纪录数不一致的情况.
表中有一条数据,正常情况下应该是 1
现在只出现一次这个错误请问是什么原因?
jdk1.6.0_12
mysql-connector-java-5.0.6-bin.jar程序:
.......
Statement stmt = myconn.createStatement();
ResultSet rs = stmt.executeQuery("select count(*) from mytable where my条件");
while (rs.next()) {
int count = rs.getInt(1);
}
.......
实际上我要通过count这个变量来判断表中有没有满足条件的数据,
有的话接下来执行更新操作
没有的话接下来执行插入操作
问题:
现在执行的时候偶然出现一次count变量和表中的满足条件的纪录数不一致的情况.
表中有一条数据,正常情况下应该是 1
现在只出现一次这个错误请问是什么原因?
用这个版本的驱动比较稳定
ResultSet rs = stmt.executeQuery("select 1 from mytable where my条件");
if(rs.next()) { //表示有
//你要做的事情
} else//表示没有
{
//你要做的事情
}
现在我就是想找出原因,因为客户需要理由,
有人告诉我可能是Statement的内部Cursor出了问题,导致取到的值错误,但是在网上找不到相关的文章
建议使用if而不要使用while来判断或者获取数据不行就换一下驱动包试试
ResultSet rs = stmt.executeQuery("select count(*) from mytable");
rs.next();
int count = rs.getInt(1);
System.out.println(count);
for(int i= 0;i< idxmax;i++){
ResultSet rs = stmt.executeQuery("select count(*) from mytable where my条件");
int count = 0;
while (rs.next()) {
count = rs.getInt(1);
}
rs.close();
if(count ==1){
stmt.executeUpdate("update ....... ")
}else{
stmt.executeUpdate("insert into ....... ")
}
} 我用同一个Statement在循环中多次使用会不会是原因?
还有,业务上是否有排他处理的可能,即有可能存在两个事务同时操作同一个表?
Statement st = myCon.createStatement();
ResultSet rs = stmt.executeQuery("select count(*) from mytab where mytab.col1 = 'aaa' and mytb.col2 = 'bbb'");
while(rs.next()){
int count = rs.getInt(1);
}
.................
mytab.col1的写法没有必要,可能是错误的原因
修改成下面的形式了
[color=#FF0000]PreparedStatement pst = myCon.prepareStatement(sqlstr);
结帖送分,谁知道详细的原因还请继续