记录存在时,结果集返回空。语句在控制台中而不是在代码中执行时有效。为什么?

时间:2019-05-24 15:04:51

标签: java mysql jdbc

我正在尝试从未托管的MySQL数据库获取记录。我的代码不会产生任何结果或引发任何错误。即使数据库中确实存在记录,我也只能得到一个空的结果集。实际上,当我在控制台中编写语句时,它将返回数据。我不确定为什么它在代码中不起作用。

我尝试过的事情:

我在控制台中测试了我的SQL查询语句,以再次检查它是否正确。该语句可在控制台中运行,所以我认为不是这样。

我的SQL连接应该正常工作,因为我在将记录插入数据库中的代码的另一部分中使用了相同的连接方法,并且该方法在这里可以正常工作。为避免并发连接,我会在完成获取结果的方法后立即关闭在此创建的连接。

我尝试停止控制台连接,以确保问题不是来自并发连接。我不这么认为,因为我已经从控制台中完全删除了数据源,而我仍然遇到了问题。另外,即使数据库存在于控制台中,我仍然可以添加记录而不会遇到任何问题。

有关更多信息,我正在Intellij Idea上对此进行编码。我的控制台也是Intellij的数据库控制台。该数据库是我不在计算机上托管的MySQL数据库。

旧代码,新代码已按评论更新(问题仍在进行中)

public ObservableList loadUsers(){
        Connection conn;
        PreparedStatement stmt;
        ResultSet rs;
        //userList is a global var in this class declared at the top
        userList = FXCollections.observableArrayList();

        try {
            conn = Model.SQL_Connection.connect();
            System.out.println(conn);
            String resultString = "select userID, userName, lastUpdate, lastUpdatedBy from user";
            stmt = conn.prepareStatement(resultString);
            rs = stmt.executeQuery();

            //used this to check size of resultset
            //it always returns 0
            System.out.println(rs.getFetchSize());
            //for each row
            while(rs.next()){
                //Iterate Row
                ObservableList<String> row = FXCollections.observableArrayList();
                //for each column
                for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
                    row.add(rs.getString(i));
                }
                userList.add(row);
            }
            conn.close();

         } catch (SQLException e) {
             e.printStackTrace();
         }
        //convert results if needed
        //put results into table
        return userList;
    }

新代码:

public ObservableList loadUsers(){
    //call result set
    Connection conn;
    PreparedStatement stmt;
    ResultSet rs;
    userList = FXCollections.observableArrayList();
    try {
        conn = Model.SQL_Connection.connect();
        System.out.println(conn);
        String resultString = "select userID, userName, lastUpdate, lastUpdatedBy from user";
        stmt = conn.prepareStatement(resultString);
        rs = stmt.executeQuery();

        //for each row
        while(rs.next()){
            //Iterate Row
            ObservableList<String> row = FXCollections.observableArrayList();
            //for each column
            for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
                row.add(rs.getString(i));
            }
            userList.add(row);
        }
        rs.close();
        stmt.close();
        conn.close();

    } catch (SQLException e) {
        e.printStackTrace();
    }
    //convert results if needed
    //put results into table
    return userList;
}

以上代码的结果是连接成功,未引发任何错误,并且rs.getFetchSize()为0。我认为这是用于测试的正确方法,但这是我的第一个SQL项目,因此我可能是错误的。

如果有人知道我可以做些什么来返回实际结果,我将不胜感激。我花了好几个小时环顾四周,但也许经验丰富的人就能发现这很简单。如果找到解决方案,我将在这里跟进。

0 个答案:

没有答案