问题描述
我有一种用于重命名表中字段的方法。它为每个字段执行一个单独的查询。
private final StringBuilder sql = new StringBuilder();
public void editNameFields(Map<String,String> fields,String naMetable) {
fields.forEach((name,newName) ->{sql.delete(0,sql.length());
sql.append("ALTER TABLE ").append(naMetable).append(" RENAME COLUMN ");
sql.append(EDIT_NAME_FIELDS).append(name).append(" to ").append(newName);
jdbcTemplate.execute(String.valueOf(sql));});
但是我想使用Batch PreparedStatementSetter来准备一批查询来重命名表字段。
Map
我可以通过调试器看到请求文本的格式正确 但是结果我得到了一个错误。 为什么?
路径为[/ sb]的上下文中的servlet [dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套的异常是org.springframework.jdbc.BadsqlGrammarException:PreparedStatementCallback;错误的sql语法[ALTER TABLE人员RENAME COLUMN吗?至 ?];嵌套的异常是org.postgresql.util.PsqlException:ERROR:语法错误(大约位置:“ $ 1”) 位置:34],其根本原因是
public int[] batchEditUsingJdbcTemplate(Map<String,String> fields) {
int[] count= jdbcTemplate.batchUpdate("ALTER TABLE person RENAME COLUMN ? to ?",new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps,int i) {
fields.forEach((name,newName) -> {
try {
ps.setString(1,name);
} catch (sqlException throwables) {
throwables.printstacktrace();
}
try {
ps.setString(2,newName);
} catch (sqlException throwables) {
throwables.printstacktrace();
}
});
}
@Override
public int getBatchSize() {
return fields.size();
}
});
return count;
}
我使用没有实体的数据库中的表。原因:表是动态创建的,结构是在REST请求中接收的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)