使用Spring以编程方式创建SQL语句

时间:2011-07-20 07:26:36

标签: java sql spring tapestry jdbctemplate

我需要以编程方式创建SQL语句。我在地图中的值为<“column_name”,值> 。现在我有一个基本查询,我添加一个where子句并迭代遍历地图,如果值不为null,我添加“”+ key +“=”+ value +“和”。然后我切了他最后5个字符就完成了。我想用比这更好的东西。请注意,我正在使用Tapestry 5 + Spring JDBC Template(Hibernate不是一个选项)。

谢谢,Ondrej

3 个答案:

答案 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