【问题标题】:MySQL connection in Java problem [duplicate]Java中的MySQL连接问题[重复]
【发布时间】:2011-06-03 01:35:11
【问题描述】:

我尝试获取一些数据表单数据库。连接方法确实有效,但我在从 DB 获取任何数据时遇到问题:

    SQLConnect s = new SQLConnect();
    Connection c = s.getConnection();

    Statement st = c.createStatement();

    ResultSet rs = st.executeQuery("select * from produkty");
    System.out.println(rs.getString(2));

问题出在最后一行(当我评论它时,没有出现错误)。 错误信息:

Connected to database
Exception in thread "main" java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5656)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5576)
    at antmedic.Main.main(Main.java:85)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

感谢您的帮助

【问题讨论】:

  • 请务必接受对您有帮助的答案...
  • 只是顺便说一下 select * 和 getXXX(column nr) 是灾难的根源。

标签: java mysql jdbc


【解决方案1】:

您需要调用ResultSet#next() 将结果集光标移动到下一行。通常,当有多个行的方法时,请在 while 循环中执行此操作。

while (rs.next()) {
    System.out.println(rs.getString(2));
}

或者,如果您希望有 0 行或 1 行,请使用 if 语句。

if (rs.next()) {
    System.out.println(rs.getString(2));
}

另见:

【讨论】:

  • 不客气。我建议看一下第二个“另见”链接。您的代码即表明您没有正确关闭finally 中的资源。这很容易导致资源泄漏,这可能会导致您的应用程序在一段时间后由于缺乏资源而崩溃。
【解决方案2】:

当你得到ResultSet对象时,光标指向第一行之前的行,所以调用后

while (rs.next()) {
//your code
}

光标指向下一行

即第一行。

【讨论】:

    【解决方案3】:

    请记住,每当触发选择查询以将数据从数据库中检索到 ResultSet 中时, 所以 ResultSet 的结构是

    -> 零记录区

    -> 数据库记录区

    -> 无记录区

    这就是为什么我们必须将 next() 与 ResultSet 对象放在一起,以便它可以从 零记录区 移动到 数据库记录区。

    【讨论】:

      【解决方案4】:
           while(rs.next())
           {
              System.out.println(rs.getString(1));
              System.out.println(rs.getString(2));
           }
      

      在 1, 2, .... 我们也可以使用数据库列名。但从技术上讲,我们总是使用像 1,2,3,.... 这样的索引,它是将来在我们的数据库中发生任何更新的原因,比如更改列名,所以它不会对我们产生任何问题,因为我们没有使用列名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-20
        • 2020-07-28
        • 1970-01-01
        • 2011-06-15
        • 2014-07-07
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多