J'essaie de récupérer des enregistrements de la base de données en utilisant la clause where avec quelques types d'arguments différents. Il s'agit de la méthode simple que j'ai écrite où je passe raceId et gender comme arguments.
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;
}
J'ai exécuté cette méthode mais j'ai obtenu une exception inférieure. Quelqu'un peut-il me faire savoir comment passer plusieurs arguments à jdbcTemplate.query (), je suis un peu nouveau pour cela.
{
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"
}
Veuillez utiliser
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));
}
Veuillez vous assurer que le jdbcTemplate est NamedParameterJdbcTemplate .
Si vous devez utiliser JdbcTemplate alors
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());
}
ou si vous insistez sur l'utilisation de la méthode de requête privée
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;
}
Veuillez vous assurer que le race__id a le nombre correct de _ caractères.
Le concept consiste à utiliser NamedParameterJdbcTemplate avec des paramètres désignés par: nom (tel que: gender) ou un simple JdbcTemplate avec des paramètres de position (tels que new Object [] {racesId, gender} où raceId correspond au premier? Et le sexe le second?) .