将不同类型的参数传递给jdbctemplate查询

我试图通过使用where子句以及几种不同类型的参数来从数据库中检索记录。这是我编写的简单方法,我在其中传递了品种ID和性别作为参数。

public List<Dog> listByBreedIdAndGender(long breedId, String gender) {  

return query("SELECT * FROM dog_entity WHERE breed__id = ? AND gender = ?",

new MapSqlParameterSource(":breedId", breedId)

.addValue(":gender", gender));

}

private List<Dog> query(String sql, MapSqlParameterSource parameters) {

List<Dog> dogs = jdbcTemplate.query(sql, new DogRowMapper(), parameters);

return dogs;

}

我运行了此方法,但出现异常。任何人都可以让我知道如何将多个参数传递给jdbcTemplate.query(),我对此有些陌生。

{

timestamp: 1419637479460

status: 500

error: "Internal Server Error"

exception: "org.springframework.dao.TransientDataAccessResourceException"

message: "PreparedStatementCallback; SQL [SELECT * FROM dog_entity WHERE breed__id = ? AND gender = ?]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException"

path: "/api/2/m"

}

回答:

请用

public List<Dog> listByBreedIdAndGender(long breedId, String gender) {  

return jdbcTemplate.query("SELECT * FROM dog_entity WHERE breed__id = :breedId AND gender =:gender",

new MapSqlParameterSource()

.addValue("breedId", breedId)

.addValue("gender", gender));

}

请确保jdbcTemplate为NamedParameterJdbcTemplate。

如果您需要使用JdbcTemplate,则

    public List<Dog> listByBreedIdAndGender(long breedId, String gender) {  

return jdbcTemplate.query

("SELECT * FROM dog_entity WHERE breed__id = ? AND gender = ?",

new Object[] { breedId, gender },

new DogRowMapper());

}

或者如果您坚持使用私有查询方法

public List<Dog> listByBreedIdAndGender(long breedId, String gender) {  

return query

("SELECT * FROM dog_entity WHERE breed__id = ? AND gender = ?",

new Object[] { breedId, gender });

}

private List<Dog> query(String sql, Object[] parameters) {

List<Dog> dogs = jdbcTemplate.query(sql, parameters, new DogRowMapper());

return dogs;

}

请确保breed__id具有正确的_个字符数。

概念是要么使用NamedParameterJdbcTemplate并使用由:name指定的参数(例如:gender),要么使用简单的JdbcTemplate并使用位置参数(例如new

Object [] {品种ID,性别},其中品种ID与第一个?匹配,性别与第二个匹配)。 。

以上是 将不同类型的参数传递给jdbctemplate查询 的全部内容, 来源链接: utcz.com/qa/434199.html

回到顶部