我有一个小问题,更新查询以与我的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。
由于
答案 0 :(得分:1)
跳过executeQuery背后的原因是由于前一行代码中发生异常。
在您的方法中,conn对象未初始化(这可能是问题)。另外,添加一个catch块来记录错误。