无法让我的查询在我的 DAO 中执行。总是 returns 空

Cannot get my Query to execute in my DAO. Always returns null

我在使用我的 DAO 将查询更新到 link 时遇到了一个小问题。

这是我的查询:

String PROJECT_ID_QUERY_BY_RAB_WWID = "SELECT PR.ID FROM PR "
       + "LEFT OUTER JOIN PROJECT ON PR.PROJECT_ID = PROJECT.ID "
       + "LEFT OUTER JOIN TW_V_WWID ON PR.ID = TW_V_WWID.PR_ID "
       + "LEFT OUTER JOIN PR_STATUS_TYPE ON PR_STATUS_TYPE.ID = PR.STATUS_TYPE "
       + "LEFT OUTER JOIN TW_V_SITE_NAME_S ON PR.ID = TW_V_SITE_NAME_S.PR_ID "
       + "WHERE PROJECT.NAME = 'Site Lead' " 
       + "and TW_V_WWID.S_VALUE = (SELECT PERSON_RELATION.S_EXTERNAL_ID FROM TW_V_ROLES_APPROVED_BY " 
       + "left outer join person_relation on tw_v_roles_approved_by.id = person_relation.id "
       + "WHERE TW_V_ROLES_APPROVED_BY.PR_ID IN ?) and "
       + "(TW_V_SITE_NAME_S.S_VALUE IN (SELECT TW_V_SITE_NAME.S_VALUE FROM TW_V_SITE_NAME "
       + "left outer join tw_v_site_name_s on tw_v_site_name_s.pr_id = tw_v_site_name.pr_id "
       + "where tw_v_site_name.pr_id in ?) or tw_v_site_name_s.s_value = 'ALL SITES') "
       + "and PR_STATUS_TYPE.NAME = 'Approved Site Lead Permissions'";

如您所见,有两个 ?。这两个 ?实际上是一样的。

这是我的 DAO class 调用此查询:

public Integer getProjectID(Integer UA_PrID)
            throws SQLException, IOException {

        Integer prId = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(QueryConstants.PROJECT_ID_QUERY_BY_RAB_WWID);
            ps.setLong(1, UA_PrID);
            ps.setLong(2, UA_PrID);
            rs = ps.executeQuery();
            while (rs.next()) {
                prId = rs.getInt("ID");
            }
        } finally {
            DaoUtil.cleanUp( ps, rs);
        }
        return prId;
    }

如您所见,我的 PS 陈述是相同的。

我在我的服务 class 中调用了 DAO 方法:

Integer prId = userAccessVerificationDAO.getProjectID(wsdlDtoList.get(0).getPrId());

其中 wsdlDtoList.get(0).getPrId() 是我的 DTO class.

中的整数值

每次我尝试调试这段代码时,我都会进入 DAO 文件并跳过,我注意到它每次都会在 DAO 中跳过这一行:

rs = ps.executeQuery();

我知道我在这里遗漏了一些小东西。第二组眼睛会很好。如果需要更多信息来解决这个小问题,请告诉我。我提前感谢大家的投入和帮助。

这是服务的较大部分 class:

Integer prId = userAccessVerificationDAO.getProjectID(wsdlDtoList.get(0).getPrId());

        if (prId == null) {
            verificationResponse = new VerificationResponseDto();
            verificationResponse.setErrorType(ErrorConstants.VERIFICATION_ERROR_TYPE);
            verificationResponse.setErrorCode(ErrorConstants.FAILURE_ERROR_CODE);
            verificationResponse.setErrorMessage(ErrorConstants.NO_PR_ID_ERROR);
            logger.error(ErrorConstants.NO_PR_ID_ERROR);
            verificationResponseDtoList.add(verificationResponse);
            return verificationResponseDtoList;

基本上它 return 每次都是空的。我在 sqldeveloper 中手动 运行 这个查询,它 return 一个有效的 prID。

谢谢

executeQuery 被跳过的原因是前一行代码中出现异常。

在您的方法中,conn 对象未初始化(这可能是问题所在)。另外,添加一个 catch 块来记录错误。