我需要以编程方式创建 SQL 语句。我在地图中有<"column_name",value>形式的值。现在我有一个基本查询,我添加了一个 where 子句并在遍历地图时,如果值不为空,我添加这个" " + key + "=" + value + " 和 "。然后我剪掉他最后的5个字符,就完成了。我想使用比这更好的东西。请注意,我使用的是 Tapestry 5 + Spring JDBC 模板(Hibernate 不是一个选项)。
谢谢, Ondrej
我需要以编程方式创建 SQL 语句。我在地图中有<"column_name",value>形式的值。现在我有一个基本查询,我添加了一个 where 子句并在遍历地图时,如果值不为空,我添加这个" " + key + "=" + value + " 和 "。然后我剪掉他最后的5个字符,就完成了。我想使用比这更好的东西。请注意,我使用的是 Tapestry 5 + Spring JDBC 模板(Hibernate 不是一个选项)。
谢谢, Ondrej
如果您需要使用动态条件,我仍然建议where
使用?
like生成
" " + key + "=?"
然后再次迭代调用preparedStatement.setXXX
. 根据驱动程序,您可以调用setObject
或检查参数类型:
if (value instanceof String)
preparedStatement.setString((String)value)
else if ...
使用?
有它的优点:
Date
为字符串和引用特殊符号。?
当您使用而不是文字值时,数据库可以更有效地缓存执行计划。您需要使用类 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
似乎您正在寻找类似 squiggle -sql的东西。并且不要忘记使用它的“设置”方法准备好的语句。