sql结果集为空,尽管测试中返回了一行

txu3uszq  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(371)

我正在用java为图书馆数据库系统构建一个简单的程序,用户可以在其中借书和还书。数据库有4个表:book、author、patrons和authords。我使用下面的sql语句检索一行数据,其中包括所有内容,再加上一列,该列计算用户已经借了多少本书。问题是程序从不进入while(res.next())循环,我认为这是因为结果集是空的。测试打印不会被打印,membid也不会被更改为用户的memberid。
但是,当我在同一个数据库上的db browser上尝试相同的sql语句时,它会返回一行,与预期的一样,返回一列。我的其他所有resultset虽然循环都工作了,并且用其他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");
        }
m4pnthwp

m4pnthwp1#

我想出来了,我应该在一个单独的查询中获取memberid,因为我试图在同一个查询中将其更改为相应的用户,因为我试图获取借来的图书数量。问题是,如果用户没有任何借来的书籍,那么结果集将是空的,memberid将不会改变其临时初始化为的内容。当一本书被借阅时,这个memberid后来被插入到表中,因此每次借阅时它都是临时的替身,而不是用户的实际memberid,因此用户名下没有借来的书。

相关问题