2

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

谢谢, Ondrej

4

3 回答 3

2

如果您需要使用动态条件,我仍然建议where使用?like生成

" " + key + "=?"

然后再次迭代调用preparedStatement.setXXX. 根据驱动程序,您可以调用setObject或检查参数类型:

if (value instanceof String) 
    preparedStatement.setString((String)value)
else if ...

使用?有它的优点:

  • 您不会考虑将类型转换Date为字符串和引用特殊符号。
  • ?当您使用而不是文字值时,数据库可以更有效地缓存执行计划。
于 2011-07-20T07:42:20.250 回答
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

于 2011-07-20T08:47:09.830 回答
0

似乎您正在寻找类似 squiggle -sql的东西。并且不要忘记使用它的“设置”方法准备好的语句。

于 2011-07-20T08:20:00.717 回答