Java中的MySQL连接问题

时间:2011-01-03 21:01:54

标签: java mysql jdbc

我尝试从数据库中获取一些数据。连接方法确实有效,但我在获取任何数据格式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)

感谢您的帮助

5 个答案:

答案 0 :(得分:5)

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

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

或者当您期望零行或一行时,请使用if语句。

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

另见:

答案 1 :(得分:1)

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

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

光标指向下一行

  

即。第一行。

答案 2 :(得分:0)

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

- >零记录区

- >数据库记录区

- >没有记录区

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

答案 3 :(得分:0)

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

在1,2,....的位置我们也可以使用数据库列名。但从技术上来说,我们总是使用像1,2,3这样的索引....它将来在我们的数据库中发生任何更新的原因,例如更改列名,因此它不会对我们发生任何问题,因为我们没有&# 39; t使用了列名。

答案 4 :(得分:0)

按照那样放下你的代码

while(rs.next())
{
  String abc=rs.getString("abc");
}