我正在尝试使用ResultSetExtractor
的演示,但我无法使其正常工作。
以下是我尝试的代码:
public String retrieveDeptName(final int deptId){
String deptName = (String)jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con)
throws SQLException {
return con.prepareStatement(SELECT_DEPT);
}
}, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, deptId);
}
},new ResultSetExtractor() {
@Override
public Object extractData(ResultSet rs) throws SQLException,
DataAccessException {
if (rs.next()) {
return rs.getLong(2);
}
return null;
}
});
System.out.println(deptName);
}
错误是:
The method update(String, Object[], int[]) in the type JdbcTemplate is not applicable for the arguments (new PreparedStatementCreator(){}, new PreparedStatementSetter(){}, new ResultSetExtractor(){})
虽然足够清楚,但我很惊讶这link如何运作?
请建议。
答案 0 :(得分:1)
update(String, Object[], int[])
类型中的方法JdbcTemplate
不适用于参数(new PreparedStatementCreator(){}, new PreparedStatementSetter(){}, new ResultSetExtractor(){}
)
信息很清楚。如果您查看API for JdbcTemplate,就可以看到是没有update
方法,它采用这三种参数类型:
int update(PreparedStatementCreator psc)
int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)
int update(PreparedStatementCreator psc, PreparedStatementSetter pss)
int update(String sql)
int update(String sql, Object... args)
int update(String sql, Object[] args, int[] argTypes)
int update(String sql, PreparedStatementSetter pss)
虽然足够清楚,但我很惊讶这link如何运作?
示例不使用update
,它使用query
, 对这些参数重载。
T query(PreparedStatementCreator psc, PreparedStatementSetter pss, ResultSetExtractor<T> rse)
答案 1 :(得分:1)
对代码进行重构,以便更具可读性
您的代码使用update
方法
String deptName = (String)jdbcTemplate.update(new PreparedStatementCreator() {
你正在进行查询 SELECT_DEPT ,更新并选择?没有任何意义。
JdbcTemplate 具有查询方法,它支持或能够使用 ResultSetExtractor