有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要以编程方式创建SQL语句。我在地图中有格式的值<;“列名称”,值> 。现在我有了一个基本查询,我添加了一个where子句,在遍历映射时,如果值不为null,我添加这个“+key+”=“+value+”和“”。然后我删掉了最后5个字符,就这样完成了。我想用比这更好的东西。注意,我使用的是Tapestry5+SpringJDBC模板(Hibernate不是一个选项)

谢谢,昂德雷


共 (3) 个答案

  1. # 1 楼答案

    看起来你在寻找类似squiggle-sql的东西。 不要忘记使用“set”方法准备好的语句

  2. # 2 楼答案

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

    " " + key + "=?"
    

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

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

    使用?有它的优点:

    • 您不会考虑将Date等类型转换为字符串并引用特殊符号
    • 当您使用?而不是文字值时,数据库可以更有效地缓存执行计划
  3. # 3 楼答案

    您需要使用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节