Java 使用NamedParameterJDBCTemplate对象指定要查询的mysql字段和值
我目前正在学习JavaSpring框架,我很难理解为什么下面的查询无法从数据库返回任何结果 我最终尝试在OffersDAO类中创建一个where方法,该方法允许我查询特定字段中的特定值Java 使用NamedParameterJDBCTemplate对象指定要查询的mysql字段和值,java,spring,jdbc,Java,Spring,Jdbc,我目前正在学习JavaSpring框架,我很难理解为什么下面的查询无法从数据库返回任何结果 我最终尝试在OffersDAO类中创建一个where方法,该方法允许我查询特定字段中的特定值 public List<Offer> where(String field, String value){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("field", fie
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;
}
});
}
显然,动态指定字段名有问题。我猜这很可能是因为字段键是作为mysql字符串插入的,而事实上mysql需要:字段占位符的列名
我的问题如下:
String sql = "select * from offers where name = :value";
有没有一种方法可以通过使用jdbc NamedParameterJdbcTemplate类来完成我在上面尝试的工作
如果我不能做到以上,我可以用什么方法
多谢各位
编辑:不引发任何异常。如果我试图提供列名,将返回一个空结果集。如何在筛选器中包括所有可能的字段,但通过字段名参数限制其使用。像这样:
select * from offers where
('name'=:field and name = :value)
OR
('field2'=:field and field2 = :value)
OR
('field3'=:field and field3 = :value)
我不知道如何用spring实现它,我的意思是使用变量列名,但我可以建议使用以下原则 保持查询与模板相似:
String sql = "select * from offers where ##field = :value";
每次执行之前,都用所需的列替换value参数。
然后你就走了。你不能在参数中指定字段名,只能指定字段值。因为您在编写代码时知道DB模式,所以这应该不是什么大问题。在这种情况下有什么例外?没有例外。相反,只返回一个空的结果集。您是否通过运行concrette查询获得空结果?当我运行具体查询时,如在select*from offers中,name='foo';我得到了案例2中返回的例外数量的结果。当我使用sql字符串:select*from offers,其中name=:value;我认为params的可能副本基本上是一个散列,sql语句中的键查询该散列以获取特定键的值。也许我使用的键域和值在哪里混淆了?啊,对不起,我误解了一些东西。我编辑了这篇文章