我的数据库中有一个表格,其中包含两列id
和name
。我写了一个类来获取和设置这两列的值。
我的getCourseName是:
public String getCourseName(int id) throws SQLException {
String SQL = "select * from courses where id ="+id;
Connection con = c.getCon();
Statement statement = con.createStatement();
ResultSet res = statement.executeQuery(SQL);
String nm = res.getString("name");
return nm;
}
当我运行此功能时,其显示错误http状态500异常:
javax.servlet.ServletException: java.sql.SQLException: Before start of result set
答案 0 :(得分:2)
忘了在res.next();
之后致电executeQuery
。此调用使结果集前进到指向第一个返回的行(假设返回了任何行)。每次额外调用都会将结果集推进到下一行。
ResultSet res = statement.executeQuery(SQL);
String nm = null;
if (res.next()) {
String nm = res.getString("name");
}
答案 1 :(得分:1)
基本错误ResultSet res = statement.executeQuery(SQL);
这会给你一个ResultsetObject
现在问题是ResultSet
ResultSet对象维护一个指向其当前数据行的游标。最初,光标位于第一行之前。下一个方法将游标移动到下一行,因为当ResultSet对象中没有更多行时它返回false,它可以在while循环中用于迭代结果集。
这意味着您需要迭代获取的resultsetObject以获取列值。 像这样的东西
while(resultSetObject.next())
{
String name = resultSetObject.getString("yourColumnName");
}
*注意始终尝试使用PreparedStatement
代替Statement
以避免sql-injection
所以在这种情况下它会是这样的
String SQL = "select * from courses where id = ?";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1,id);
ResultSet res = statement.executeQuery();
答案 2 :(得分:0)
public String getCourseName(int id) throws SQLException {
String SQL = "select * from courses where id ="+id;
Connection con = c.getCon();
Statement statement = con.createStatement();
ResultSet res = statement.executeQuery(SQL);
String nm = null;
if(res.next())
nm = res.getString("name");
con.close();
return nm;
}