【问题标题】:error in executeQuery in jdbc connection [duplicate]jdbc连接中的executeQuery错误[重复]
【发布时间】:2014-08-03 13:53:16
【问题描述】:

我的数据库中有一个表,它有两列 idname 。我为这两列的获取和设置值编写了一个类。 我的课程名称是:

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

【问题讨论】:

    标签: java mysql jdbc


    【解决方案1】:

    您忘记在executeQuery 之后拨打res.next();。此调用将结果集推进以指向第一个返回的行(假设返回了任何行)。对它的每次额外调用都会将结果集推进到下一行。

    ResultSet res = statement.executeQuery(SQL);
    String nm = null;
    if (res.next()) {
      String nm = res.getString("name");
    }
    

    【讨论】:

      【解决方案2】:

      基本错误ResultSet res = statement.executeQuery(SQL); 这给你一个ResultsetObject

      现在问题来了ResultSet是什么

      ResultSet 对象维护一个指向其当前数据行的游标。最初,光标位于第一行之前。 next 方法将光标移动到下一行,并且由于它在 ResultSet 对象中没有更多行时返回 false,因此可以在 while 循环中使用它来遍历结果集。

      这意味着您需要遍历获取的结果集对象以获取列值。 像这样的

      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();
      

      【讨论】:

        【解决方案3】:
        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;
        }
        

        【讨论】:

          猜你喜欢
          • 2015-09-05
          • 2019-01-05
          • 1970-01-01
          • 2015-06-12
          • 1970-01-01
          • 2016-08-21
          • 1970-01-01
          • 1970-01-01
          • 2015-09-26
          相关资源
          最近更新 更多