无法让我的查询在我的DAO中执行。始终返回null

时间:2015-07-24 01:07:41

标签: java sql-server service dao dto

我有一个小问题,更新查询以与我的DAO链接。

这是我的查询:

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类:

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声明是一样的。

我在我的Service类中调用DAO方法:

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

其中wsdlDtoList.get(0).getPrId()是我的DTO类中的integet值。

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

rs = ps.executeQuery();

我知道我在这里错过了一些小事。对此的第二眼看是很棒的。如果需要更多信息以解决这个小问题,请告诉我。我提前感谢你们的投入和帮助。

以下是服务类的较大部分:

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;

基本上每次都返回null。我在sqldeveloper中手动运行此查询,它确实返回了有效的prID。

由于

1 个答案:

答案 0 :(得分:1)

跳过executeQuery背后的原因是由于前一行代码中发生异常。

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