java如何正确使用JdbcTemplate。用钥匙夹更新?
我有一个方法可以将用户保存在DB中并返回自动生成的id:
public int save(User user) {
KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(SAVE_USER, user.getParams(), holder);
return holder.getKey().intValue();
}
public Object[] getParams() {
return new Object[]{
email, // String email
password}; // String password
}
保存用户=INSERT INTO user (email, password) VALUES (?, ?)
当我试图执行一个方法时,我遇到了一个异常:
Request processing failed; nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback;
SQL [INSERT INTO user (email, password) VALUES (?, ?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
# 1 楼答案
看起来你在用Spring。JdbcTemplate接口因版本而异。尽管如此,在我所知的任何版本中,都没有一个方法签名与我认为您的预期调用相匹配:
从Spring 3开始,只有:
不幸的是,尽管您的调用与最后一个方法的签名匹配,但它并不能满足我的要求。它尝试将每个参数作为单个参数应用于SQL语句。在这种情况下,您的密钥持有者不合适,必须将params数组作为单个参数拆分。基本上,这种方法对你正在做的事情不起作用
如果你想使用钥匙夹,我认为你需要改变你的方法来使用这个方法: