开发者

MySQL connection in Java problem [duplicate]

This question already has answers here: ResultSet exception - before start of result set (6 answers) Closed 5 years ago.

I try to get some data form database. The connection method works for sure, but I have a problem getting any data form DB:

    SQLConnect s = new SQLConnect();
    Connectio开发者_如何学运维n c = s.getConnection();

    Statement st = c.createStatement();

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

The problem is with the last line (when I comment it, no error appears). Error message:

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)

Thanks for any help


You need to call ResultSet#next() to shift the resultset cursor to the next row. Usually, when there's means of multiple rows, do this in a while loop.

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

Or when you expect zero or one row, use an if statement.

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

See also:

  • JDBC tutorial
  • Examples of how to traverse the ResultSet correctly


As you get the ResultSet object, the cursor points to the row before the first row, So after calling

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

the cursor points to the next row

i.e. the first row.


Remember, whenever select query fires for retrieving the data from database into ResultSet, so the structure of ResultSet is

-> Zero Record Area

-> Database Record Area

-> No Record Area

that's why alwayz we must put next() with ResultSet object so it can move from Zero Record Area to Database Record Area.


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

at the place of 1, 2, .... we can use the database columns name also. But technically always we use indexing like 1,2,3,.... its reason for any updation happening in future at our database like changes the column name so it can't be occur any problem for us because we haven't used the columns names.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜