环境:
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);
}
}
}