无法让我的查询在我的 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 块来记录错误。
我在使用我的 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 块来记录错误。