错误一:sql server将字符串转换为 uniqueidentifier 时失败
修改前:
SELECT
a.OVER_QUOTA_APPLYOID AS applyId,
al.OVER_QUOTA_APPROVALOID AS approvalId,
b.PartnerName AS clientName,
b.PartnerID AS clientId,
f.Docno AS fsno,
b.LevelID AS clientLevel,
u.EmployeeName AS businessPerson,
a.Advance_AMOUNT AS advanceAmount,
a.Tax_AMOUNT AS taxAmount,
a.SYS_Created AS applyTime,
a.APPLY_STATUS AS applyStatus
FROM
FINB001 f
LEFT JOIN BASB001 b ON f.BASB001_FK = b.BASB001OID
LEFT JOIN UCML_User u ON u.UCML_UserOID = b.BusinessID
LEFT JOIN OVER_QUOTA_APPLY a ON f.FINB001OID = a.FH_AP_FK
LEFT JOIN OVER_QUOTA_APPROVAL al ON a.OVER_QUOTA_APPLYOID = al.OVER_QUOTA_APPLY_FK
WHERE
ORDER_TYPE = 1
AND FINB001OID = ( SELECT FH_AP_FK FROM OVER_QUOTA_APPLY WHERE OVER_QUOTA_APPLYOID = ? )
修改后:
SELECT
a.OVER_QUOTA_APPLYOID AS applyId,
al.OVER_QUOTA_APPROVALOID AS approvalId,
b.PartnerName AS clientName,
b.PartnerID AS clientId,
f.Docno AS fsno,
b.LevelID AS clientLevel,
u.EmployeeName AS businessPerson,
a.Advance_AMOUNT AS advanceAmount,
a.Tax_AMOUNT AS taxAmount,
a.SYS_Created AS applyTime,
a.APPLY_STATUS AS applyStatus
FROM
FINB001 f
LEFT JOIN BASB001 b ON f.BASB001_FK = b.BASB001OID
LEFT JOIN UCML_User u ON u.UCML_UserOID = b.BusinessID
LEFT JOIN OVER_QUOTA_APPLY a ON f.FINB001OID = a.FH_AP_FK
LEFT JOIN OVER_QUOTA_APPROVAL al ON a.OVER_QUOTA_APPLYOID = al.OVER_QUOTA_APPLY_FK
WHERE
ORDER_TYPE = 1
AND FINB001OID = ( SELECT FH_AP_FK FROM OVER_QUOTA_APPLY WHERE CAST(OVER_QUOTA_APPLYOID AS VARCHAR(36)) = ? )
因为OVER_QUOTA_APPLYOID在数据库中的数据类型为uniqueidentifier,如果在使用查询语句传参不为uniqueidentifier形式,就会报字符串转换失败错误。
解决方案:在条件判断之前,把该字段转换为字符串形式即可
错误二:# Incorrect result size: expected 1, actual 0
在使用JDBC的过程中,使用到了queryForObject方法,预期是存在对象,然而查出来为空时,就会抛出DataAccessException异常。
try {
return sqlserverJdbcTemplate.queryForObject(sql,new Object[]{applyId,applyId},new BeanPropertyRowMapper<>(OverQuotaItem.class));
} catch (DataAccessException e) {
return null;
}
解决方案:捕获异常,并返回null,即可在查出结果为空时,返回空