jdbc连接中的executeQuery错误

时间:2014-08-03 13:53:16

标签: java mysql jdbc

我的数据库中有一个表格,其中包含两列idname。我写了一个类来获取和设置这两列的值。 我的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

3 个答案:

答案 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;
}