2013-10-09 34 views
2

每當我運行此代碼時,此錯誤如下所示。 。 。!Java中的SQLException錯誤

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:5650) 
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570) 
at com.mysql.jdbc.ResultSetImpl.getDoubleInternal(ResultSetImpl.java:2463) 
at com.mysql.jdbc.ResultSetImpl.getDouble(ResultSetImpl.java:2424) 
at com.mysql.jdbc.ResultSetImpl.getDouble(ResultSetImpl.java:2442) 
at Library.main(Library.java:157) 

以下是main的代碼,我運行並捕獲此錯誤。 。 。

System.out.println("Registration number of member returning book: "); 
     String number = input.nextLine(); 

     System.out.println("Book shelf number"); 
     double bookNumber = input.nextDouble(); 

     double shelfNo; 
     String borrower; 
     long timeBookTaken; 
     long timeToReturnBook; 

     if(borrow.hasBeenBorrowed(bookNumber)) 
     { 
      String sql = "SELECT * FROM borrowed WHERE shelfNumber = '"+ bookNumber +"'"; 
      ResultSet rs = con.readDatabase(sql,statement); 



       //Statement statmnt = con.getStatement(); 
       shelfNo = rs.getDouble("shelfNumber"); 
       borrower = rs.getString("borrowerRegNum"); 
       timeBookTaken = rs.getLong("timetaken"); 
       timeToReturnBook = rs.getLong("time_to_return"); 

       System.out.println(shelfNo+"\t"+borrower+"\t"+timeBookTaken+"\t"+timeToReturnBook); 

con(是DBConnection類的一個實例)。 。 。 readDatabase方法在DBConnection類中。

DBConnection class 
=================== 


    package database; 

    import java.sql.*; 

    public class DBConnection 
    { 

     private static Connection connection; 
     private static Statement statement; 
     private static ResultSet resultset; 

private static String mysqlURL = "jdbc:mysql://localhost/library"; 
private static String mysqlUsername = "root"; 
private static String mysqlPassword = ""; 

public DBConnection() 
{ 
    try 
    { 
     Class.forName("com.mysql.jdbc.Driver"); 
     connection 
       = DriverManager.getConnection(mysqlURL,mysqlUsername,mysqlPassword); 
     statement = connection.createStatement(); 

    } 
    catch(Exception exception) 
    { 
     System.out.println("Error: "+ exception.getMessage()); 
    } 

} 

public Connection getConnection() 
{ 
    return connection; 
} 


public Statement getStatement() 
{ 
    return statement; 
} 

public ResultSet readDatabase(String sql,Statement statement) throws SQLException 
{ 
    resultset = statement.executeQuery(sql); 

    return resultset; 
} 

}

回答

1

您還沒有叫next()的結果集呢。這不僅告訴你如果結果集中有另一行,它會將結果集遊標推進到該行。

附上「搞定」調用的結果

while (rs.next()) { 

    // get calls here 

} 

所以你處理所有行設置,推進到每一行每一循環。

+0

謝謝,它的工作! –

+0

@Yunus Einsteinium,如果此解決方案適合您,則應標記爲已接受 – justadeveloper