java - 使用 NamedParamterJdbcTemplate 对象指定要查询的 mysql 字段和值

标签 java spring jdbc

我目前正在学习 Java Spring 框架,我很难理解为什么以下查询无法从数据库返回任何结果。

我最终尝试在我的 OffersDAO 类中创建一个 where 方法,该方法允许我在特定字段上查询特定值。

public List<Offer> where(String field, String value){

    MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue("field", field);
    params.addValue("value", value);
    String sql = "select * from offers where :field = :value";
    return jdbc.query(sql, params, new RowMapper<Offer>(){

        public Offer mapRow(ResultSet rs, int arg1) throws SQLException {
            Offer offer = new Offer();
            offer.setId(rs.getInt("id"));
            offer.setName(rs.getString("name"));
            offer.setText(rs.getString("text"));
            offer.setEmail(rs.getString("email"));
            return offer;   
        }

    });

}

当我显式指定字段时,我能够成功查询数据库以获取结果,如下所示:

String sql = "select * from offers where name = :value";

显然动态指定字段名是有问题的。我的猜测很可能是由于 field 键作为 mysql 字符串插入(带有 ''),而实际上 mysql 需要一个列名对于 :field 占位符。

我的问题如下:

  1. 有没有办法使用 jdbc NamedParameterJdbcTemplate 类来完成我上面尝试做的事情?

  2. 如果我无法完成上述任务,我可以通过什么方式实现?

谢谢

编辑:不会引发异常。当我尝试提供列名时,会返回一个空结果集。

最佳答案

您不能在参数中指定字段名称 - 只能指定字段值。由于您在编写代码时了解数据库架构,因此这应该不是什么大问题。

关于java - 使用 NamedParamterJdbcTemplate 对象指定要查询的 mysql 字段和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19921732/

相关文章:

java - 按列将数据插入 PostgreSQL 中的行

java - 如何将方法输出传递到数组元素中?

java - 安装 Eclipse 时出错

java - 使用绑定(bind)变量创建 SQL 查询时出错 - Spring 中的 JDBCTemplate

Java 构建相互依赖的事件链

java - bean 的空属性会被插入到 MongoDB 中吗?

java - 连接到 MySQL 服务器 JDBC

java - Firebase 数据库未更新

java - 如何在 Jooq 中初始化和创建 ResultSet 和 Record?

java - 使用 Play 框架 2.3x 实现 Hibernate