Java 使用Spring以编程方式创建SQL语句
我需要以编程方式创建SQL语句。我有地图中的值。现在我有了一个基本查询,我添加了一个where子句,在遍历映射时,如果值不为null,我添加这个“+key+”=“+value+”和”。然后我删掉了最后5个字符,就这样完成了。我想用比这更好的东西。注意,我使用的是Tapestry5+SpringJDBC模板(Hibernate不是一个选项)Java 使用Spring以编程方式创建SQL语句,java,sql,spring,tapestry,jdbctemplate,Java,Sql,Spring,Tapestry,Jdbctemplate,我需要以编程方式创建SQL语句。我有地图中的值。现在我有了一个基本查询,我添加了一个where子句,在遍历映射时,如果值不为null,我添加这个“+key+”=“+value+”和”。然后我删掉了最后5个字符,就这样完成了。我想用比这更好的东西。注意,我使用的是Tapestry5+SpringJDBC模板(Hibernate不是一个选项) 谢谢,Ondrej如果您需要使用动态条件,我仍然建议您使用生成where?类似 " " + key + "=?" 然后再次迭代调用preparedState
谢谢,Ondrej如果您需要使用动态条件,我仍然建议您使用
生成where
?
类似
" " + key + "=?"
然后再次迭代调用preparedStatement.setXXX
。根据驱动程序的不同,您可以调用setObject
或检查参数类型:
if (value instanceof String)
preparedStatement.setString((String)value)
else if ...
使用?
有其优点:
- 您不会考虑将
等类型转换为字符串并引用特殊符号李>Date
- 当您使用
而不是文字值时,数据库可以更有效地缓存执行计划?
不要忘记使用“set”方法准备语句。您需要使用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
参考:
请参见第11.2.8节是,但我如何创建PreparedStatement?我使用的是JDBCTemplate,因此我没有在其上创建语句的连接。@Ondrej:如果使用JDBCTemplate,则需要将参数作为数组传递,而不是单独设置参数。您有
查询(字符串sql,对象[]参数,行映射器行映射器)
如果您已经有了sql
和,那么您可以将值作为args
进行传递。
看起来很不错,但它是否稳定并经过测试?最后一个版本是2009年的Java1.4,这不是很新。没错,没有太多的活动。但是,它非常小和简单,所以我不希望它有任何问题。我甚至建议将源代码复制到项目中,直接使用它们,并在需要时进行扩展。