java - ResultSet 关闭后不允许进行 ResultSet、空指针异常和 SQLException 操作

标签 java sql

我是 java 和 SQL 新手,我重复了一个我不知道如何避免的问题:

假设我想创建两个executeQuery,一个在另一个内部,在getRequestsFromDB方法中我创建第一个executeQuery,在第二个方法isProfessionalHasThatProfession中我创建第二个executeQuery:

 private Vector<ClientRequest> getRequestsFromDB() throws SQLException {
    Vector<ClientRequest> retVal = new Vector<ClientRequest>();
    ResultSet result = null;
    try {
        for (int i=0 ; i<_userBean.getProfession().length ; ++i ){
            result = _statement.executeQuery("SELECT * FROM "+_dbName+"."+CLIENTS_REQUEST_TABLE+" WHERE "+CLIENTS_REQUEST_T_PROFESSION+"='"+_userBean.getProfession()[i]+"'");               
            while(result.next()){ //HERE IN THE SECOND LOOP GETTING NULL EXCEPTION

                if(isProfessionalHasThatProfession(result.getString(CLIENTS_REQUEST_T_PROFESSION))){
                    retVal.add(cr);
                    ClientRequest cr = new ClientRequest
                            (result.getString(CLIENTS_REQUEST_T_CLIENT_ID), 
                            result.getString(CLIENTS_REQUEST_T_CITY),
                            result.getString(CLIENTS_REQUEST_T_DATE),
                            result.getString(CLIENTS_REQUEST_T_PROFESSION));
                }
            }
        }
    } catch (SQLException ex) {
        throw ex;
    }
    return retVal;
}

第二个函数:

private boolean isProfessionalHasThatProfession(String profession) throws SQLException {             
    ResultSet result = null;
    try {
        result = _statement.executeQuery("SELECT "+WORKER_PROFESSIONS_T_PROFESSION+" FROM "+_dbName+"."+WORKER_PROFESSIONS_TABLE+" WHERE "+WORKER_PROFESSIONS_T_PROFESSIONAL_ID+"='"+_userBean.getProId()+"'");
        while(result.next()){
            if(result.getString(1).equals(profession)){
                return true;
            }
        }
    } catch (SQLException ex) {
        throw ex;
    }
    return false;
}

在第二个循环中,我收到 SQLException:“ResultSet 关闭后不允许操作”,我尝试过: 最后用 result.close() 关闭结果,但我也得到了空指针异常。

我真的不知道如何处理这个问题,有什么想法吗? 谢谢!

最佳答案

您正在重用_statement(我认为这是全局的?)来获取2个不同的ResultSet,但随后您返回到第一个ResultSet (在外部函数中)在获得第二个(在内部函数内部,自动关闭第一个)之后 - 尝试使用 2 个单独的语句

关于java - ResultSet 关闭后不允许进行 ResultSet、空指针异常和 SQLException 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285086/

相关文章:

php - 在服务器上运行的 MySQL 查询在本地不起作用

mysql - 如何求和 MySQL 中的两个第一个字符?

java - 如何仅使用数组和循环(没有其他方法)来删除 null?

java - 在不知道图像名称的情况下将图像读入 ArrayList

java - JTabbedPane 的 MouseEvent

SQL获取最新记录

MySQL - 计算每组中的行数

java.sql.SQLException : ORA-01843: not a valid month (Working in SQL DEVELOPER and doesn't work in JAVA)

java - 无法读取嵌入资源

java - 为什么 String.endsWith 和 String.startsWith 不一致?