Ich benutze NamedParameterJDBCTemplate in Spring und versuchen, nur wenige Spalten anstelle von allen Spalten auszuwählen. Aber ich habe einen Fehler - org.SpringFramework.BadSqlGrammarException.Wählen Sie ein paar Spalten mit NamedParameterJDBCTemplate
Meine DAO-Klasse hat den folgenden Code.
@Autowired
private NamedParameterJdbcTemplate npjt;
... // Some other code
String query = "SELECT t.name AS NAME, t.city AS CITY FROM t WHERE t.country = :countryName";
MapSqlParameterSource param = new MapSqlParameterSource();
param.addValue("countryName", "GERMANY");
List<Person> pl = npjt.query(sql,param, new PersonMapper()); // Throws org.SpringFramework.BadSqlGrammarException
Die Personenmodellklasse ist wie folgt.
public class Person {
String name;
String city;
String country;
String address;
// All getters & setters
}
Die Mapper-Klasse ist wie folgt.
public class PersonMapper implements RowMapper {
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person p = new Person();
p.setName(rs.getString("NAME"));
p.setCity(rs.getString("CITY"));
return p;
}
}
Mit dem Fehler nur konfrontiert, wenn Sie ein paar Spalten auswählen. Wenn Sie eine Auswahl * treffen, funktionieren die Dinge gut.
Könnten Sie auch der Frage die Ausgabe des Befehls hinzufügen: 'für (int i = 1; i <= rs.getMetaData(). GetColumnCount(); i ++) {System.out.println (rs.getMetaData(). GetColumnName (i));} '? Es kann Ihnen helfen, die Namen der Spalten zu identifizieren, mit denen Sie zu tun haben. Auch der Stacktrace der 'BadSqlGrammarException' kann hilfreich sein. –
@marius_neo - Der Debug-Zeiger wird nicht in die mapRow-Funktion eingefügt. Es bricht hier ein, npjt.query (...), wo der SQL-Aufruf gemacht wird. –
Ist der Tabellenname aus dem von Ihnen geposteten Beispielcode wirklich "t" oder fehlt der Tabellenname wirklich aus Ihrer Abfrage? –