【问题标题】:SQL ResultSet is empty despite having a row returned in tests尽管在测试中返回了一行,但 SQL ResultSet 为空
【发布时间】:2021-03-18 06:44:40
【问题描述】:

我正在用 Java 为图书馆数据库系统构建一个简单的程序,读者可以在其中借书和还书。该数据库有 4 个表:Book、Author、Patrons 和 AuthorIds。我正在使用下面的 SQL 语句来检索 1 行数据,其中包括所有内容以及一列,该列计算了顾客已经借了多少本书。问题是程序永远不会进入 while(res.next()) 循环,我认为这是因为结果集是空的。不会打印测试打印件,并且不会将 membID 更改为赞助人的 MemberID。

但是,当我在同一数据库上的 db 浏览器上尝试相同的 SQL 语句时,它会返回 1 行,如预期的 BooksBorrowed 列。我的所有其他 ResultSet while 循环都可以正常工作并返回带有其他 SQL 语句的行,只是这个没有,我不知道为什么。

   public void borrowBooks(String fName, String lName, Scanner input) throws SQLException {
        //first find out how many books the user has already borrowed
        int booksBorrowed = 0;
        int membID = 1; //this will be used for later
        sql = "select *, Count(MemberID) AS BooksBorrowed\r\n" +
                "FROM Book\r\n" + 
                "   JOIN AuthorIds USING (BookID)\r\n" + 
                "   JOIN Author USING (AuthorID)\r\n" + 
                "   JOIN Patron USING (MemberID)\r\n" + 
                "WHERE PatronFirstName LIKE ? AND PatronLastName LIKE ?\r\n" + 
                "GROUP BY MemberID\r\n" + 
                "ORDER BY BookID ASC";
        PreparedStatement stmt = connection.prepareStatement( sql );
        stmt.setString(1, fName);
        stmt.setString(2, lName);
        ResultSet res = stmt.executeQuery();
        while(res.next()) {
            booksBorrowed = res.getInt("BooksBorrowed");
            System.out.println(res.getInt("MemberID"));
            System.out.println("Test");
            membID = res.getInt("MemberID");
        }
        if(booksBorrowed >= 2) {
            System.out.println("You have already borrowed the maximum amount of 2 books. Return books to borrow more");
        }

【问题讨论】:

  • 我会删除您的connection.prepareStatement(sql); 中的空格可能不是您的问题的原因,但有时这些空格确实对我造成了一些错误。

标签: java sql resultset


【解决方案1】:

我想通了,我应该在单独的查询中获得 memberID,因为我试图在同一个查询中将其更改为相应的顾客,因为我试图获得借阅的书籍数量。问题是如果顾客没有借阅任何书籍,那么结果集将是空的,并且 memberID 不会改变它临时初始化的值。这个 memberID 后来被插入到借书时的表中,因此它是每次的临时展台,而不是顾客的实际 memberID,因此顾客不会以他们的名义借阅任何书籍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多