您的位置:首页 > 编程语言 > Java开发

java从MySQL表中取出数据时报错:java.sql.SQLException: Before start of result set

2017-03-26 11:36 489 查看

环境:

java 1.8, MySQL 5.7

问题:

for(String each:book.getLabel()){
ps = cn.prepareStatement("SELECT labelid FROM booklabel WHERE label=?");
ps.setString(1, each);
rs = ps.executeQuery();
if(rs.next()){ // if label has been in booklabel DB, get its labelid
labelIDSet.add(rs.getString(1));
}else{ // if not,store it into booklabel DB and then get its labelid
//store
ps = cn.prepareStatement("INSERT INTO booklabel(label) " + "VALUES(?)");
ps.setString(1, each);
ps.executeUpdate();
//get labelid
ps = cn.prepareStatement("SELECT labelid FROM booklabel WHERE label=?");
ps.setString(1, each);
rs = ps.executeQuery();
// create labelIDSet

String result = rs.getString(1);
labelIDSet.add(result);

}
}


String result = rs.getString(1);
这里报了个错:

java.sql.SQLException: Before start of result set

原因:

因为在取出ResultSet对象,对其进行操作时,没有采用.next()方法将ResultSet对象的光标移至指定行,不管Statement对象执行SQL语句是否十分确定能搜出记录

解决:

for(String each:book.getLabel()){
ps = cn.prepareStatement("SELECT labelid FROM booklabel WHERE label=?");
ps.setString(1, each);
rs = ps.executeQuery();
if(rs.next()){ // if label has been in booklabel DB, get its labelid
labelIDSet.add(rs.getString(1));
}else{ // if not,store it into booklabel DB and then get its labelid
//store
ps = cn.prepareStatement("INSERT INTO booklabel(label) " + "VALUES(?)");
ps.setString(1, each);
ps.executeUpdate();
//get labelid
ps = cn.prepareStatement("SELECT labelid FROM booklabel WHERE label=?");
ps.setString(1, each);
rs = ps.executeQuery();
// create labelIDSet
if(rs.next()){
String result = rs.getString(1);
labelIDSet.add(result);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: