2

每当我运行此代码时,此错误如下所示。. .!

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;
}

}

4

1 回答 1

1

您还没有调用next()结果集。这不仅会告诉您结果集中是否还有另一行,还会将结果集游标推进到该行。

将您对结果集的“获取”调用包含在

while (rs.next()) {

    // get calls here

}

所以你处理所有行,每个循环前进到每一行。

于 2013-10-09T21:34:22.853 回答