DBUtils - à l'aide de ResultSetHandler
Je suis en train d'utiliser ResultSetHandler pour passer de la Liste des élèves à une servlet mais l'obtention d'erreur ci-dessous
java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
la méthode des Élèves de la classe est
public List<Student> list2() throws SQLException {
Connection connection = null;
List<Student> studentList = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)
envCtx.lookup("jdbc/TestDB");
connection = ds.getConnection();
ResultSetHandler h = new ArrayListHandler();
QueryRunner run = new QueryRunner(ds);
String sql = "select student_id, student_name from tbl_student";
studentList = (List<Student>)run.query(sql, h);
}catch(SQLException sqle) {
sqle.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
DbUtils.closeQuietly(connection);
}
return studentList;
}
la méthode alternative où je ne suis pas à l'aide de DButils fonctionne bien .
public List<Student> list() throws SQLException {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
List<Student> studentList = new ArrayList<Student>();
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)
envCtx.lookup("jdbc/TestDB");
connection = ds.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery("select student_id, student_name from tbl_student");
while (resultSet.next()) {
Student student = new Student();
student.setId(resultSet.getInt("student_id"));
student.setName(resultSet.getString("student_name"));
studentList.add(student);
}
}catch(SQLException e) {
e.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
return studentList;
}
Comment puis-je résoudre ce problème?
- Pouvez-vous ajouter la trace de la pile complète?
- lorsque vous exécutez la même requête
select student_id, student_name from tbl_student
à partir d'un dbclient en quoi est-il de retour ? est-il retourner la valeur " id " dans la student_id de la colonne?
Vous devez vous connecter pour publier un commentaire.
Je vous recommande d'utiliser le BeanListHandler pour récupérer toutes les lignes du jeu de résultats et de les transformer en une Liste de JavaBeans comme indiqué ci-dessous:
BeanListHandler
crée une instance de la classe donnée et met les valeurs des colonnes en correspondance des propriétés. Par conséquent, vous devez renommer votre colonnes correspondent les noms de vos propriétés du bean. Le SQL doit être:SELECT student_id id, student_name name FROM tbl_student
,si le nom de colonne n'est pas le match de l'Haricot de propriété, veuillez utiliser columntoPropertyOverrrides, ce sera parfait pour résoudre ce problème.