我需要以编程方式创建SQL语句。我在地图中的值为<“column_name”,值> 。现在我有一个基本查询,我添加一个where子句并迭代遍历地图,如果值不为null,我添加“”+ key +“=”+ value +“和”。然后我切了他最后5个字符就完成了。我想用比这更好的东西。请注意,我正在使用Tapestry 5 + Spring JDBC Template(Hibernate不是一个选项)。
谢谢,Ondrej
答案 0 :(得分:2)
如果您需要使用动态条件,我仍建议您使用where
生成?
" " + key + "=?"
然后再次迭代以致电preparedStatement.setXXX
。根据驱动程序,您可以调用setObject
或检查参数类型:
if (value instanceof String)
preparedStatement.setString((String)value)
else if ...
使用?
有它的优点:
Date
等类型转换为字符串和引用特殊符号。 ?
而非文字值时,数据库可以更有效地缓存执行计划。答案 1 :(得分:0)
好像你在找squiggle-sql之类的东西。 并且不要忘记使用'set'方法准备好的语句。
答案 2 :(得分:0)
您需要使用PreparedStatementCreator类
final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps =
connection.prepareStatement(INSERT_SQL, new String[] {"id"});
ps.setString(1, name);
return ps;
}
},
keyHolder);
// keyHolder.getKey() now contains the generated key
参考:http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html
见章节:11.2.8