我正在使用Java EE和derby,我尝试从我的结果集中获取数据并将它们放在int和string中但不起作用它给了我这个错误:
java.sql.SQLException:当前光标位置的无效操作。
我尝试了result.next()但没有,这是我的代码:
Connection conn = null;
Statement stmt = null;
ResultSet result = null;
Hotel hot = new Hotel();
try {
synchronized (dataSource) {
conn = dataSource.getConnection();
}
stmt = conn.createStatement();
String req = "SELECT * FROM hotel WHERE num = " + num;
result = stmt.executeQuery(req);
}
//result.next();
int xxnum = result.getInt(1);
String nom = result.getString("nom");
String villeV = result.getString("ville");
int etoilesV = result.getInt("etoiles");
String directeur = result.getString("directeur");
Hotel hol = new Hotel(num, nom, villeV, etoilesV, directeur);
result.close();
stmt.close();
return hol;
} catch (SQLException ex) {
throw new DAOException("probl�me r�cup�ration de la liste des hotels !!", ex);
} finally {
closeConnection(conn);
}
答案 0 :(得分:4)
错误
java.sql.SQLException: Invalid operation for the current cursor location.
不使用将光标设置到下一个位置会导致
result.next();
将来电置于if
声明
if (result.next()) {
// build Hotel object
...
}
如果仍然没有看到任何结果,请直接针对您的数据库运行SQL
,看看是否有任何记录被返回。如果没有,请相应地调整您的查询或数据。
附注:
PreparedStatement
防止SQL Injection攻击。result.close();
和stmt.close();
个来电置于finally
区块。答案 1 :(得分:2)
您需要使用ResultSet的next()
方法。
检查Javadocs here,我已经剪断了下面的相关部分。
将光标从当前位置向前移动一行。 ResultSet 光标最初位于第一行之前;对方法的第一次调用使得第一行成为当前行;第二个调用使第二行成为当前行,依此类推。
所以你需要在代码中执行此操作:
if(result.next())
{
int xxnum = result.getInt(1);
String nom = result.getString("nom");
String villeV = result.getString("ville");
int etoilesV = result.getInt("etoiles");
String directeur = result.getString("directeur");
}