并非所有变量绑定异常都使用 JDBC 模板



我正在使用jbcTemplate,遇到了ORA-01008异常。

package com.awzpact.prayas.service;
import com.awzpact.uam.dao.BaseJdbcTemplate;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.stereotype.Service;
/**
*
* @author zia.khan
*/
@Service
public class PayCodeDetailListService extends BaseJdbcTemplate {
public List<Map<String, Object>> searchPayCodeByempCode(String tabSuffix, String empCode, String yyyyMm) {
MapSqlParameterSource param = new MapSqlParameterSource();
String tableName = "Salary_detail_report_082018";
String query = "SELECT "
+ " DISTINCT PAY_CODE, "
+ " PAY_CODE_DESC, "
+ " AMOUNT, "
+ " row_number() over (Order by EMP_CODE ) AS ROW_NUM "
+ " FROM " + tableName
+ " WHERE EMP_CODE=:EMP_CODE "
+ " AND YYYYMM=:YYYYMM "
+ " AND PAY_CODE NOT IN (997,998,999) "
+ " ORDER BY PAY_CODE ASC ";
param.addValue("empCode", empCode);
param.addValue("YYYYMM", yyyyMm);
List<Map<String, Object>> employees = queryForList(query);
if (employees != null && !employees.isEmpty()) {
for (Map<String, Object> employee : employees) {
for (Iterator<Map.Entry<String, Object>> it = employee.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
Object value = entry.getValue();
System.out.println(key + " = " + value);
}
}
}
return employees;
}
}

此行List<Map<String, Object>> employees = queryForList(query);抛出和异常。

另外我还想知道,查询执行后返回的结果可以直接绑定到POJO中。

简单的意思是,我的查询将返回有限数量的列,如 10,13,15 50,90 等。

现在我不想实现映射器,因为有 95 条记录,对于有限的记录,我需要编写大映射器,每次我还需要在映射行时检查空值。

我想直接将结果绑定到域中。

所以在研发之后,我想出了这个解决方案,在测试时我遇到了这个问题,请向我建议最好的解决方案。

除了 Tim 的回答之外,我还想补充一点,您的代码不会将param变量放入查询中。您必须以某种方式将param映射放入查询中。如果我们谈论的是Spring JdbcTemplate类,它有大量不同的方法,例如,您可以执行以下操作:

jdbcTemplate.query(
"select id from your_table_here where first_column = ? and second_column = ?",
new Object[] {
firstParameter, secondParameter
},
new int[] {
VARCHAR, VARCHAR // types of parameters in same order
},
new SingleColumnRowMapper<>()   // here you can use your own mapper
);

最新更新