如何在DAO类中返回(SELECT*FROM TABLE)的结果



我需要编写一个DAO类,它应该返回mysql表的所有4列(SELECT*FROM table(。

这个类只返回一个列表(一列(我不知道如何更改它,以便它可以返回一个对象(4列--所有行(谢谢

**下面的类将返回一个只有一列的列表:listID.add(res.getString("ID"((;getString方法只接受一个参数,我需要该类返回所有列("ID"NAME"GRADE"GROUPE"(

public static listID<String> getID() {
List<String> listID = new LinkedList();
try {
Connection cnx = conn.getConnection();
stmt = conn.createStatement();
String requete = "SELECT ID FROM student";
ResultSet res = stmt.executeQuery(requete);
while (res.next()) {
listID.add(res.getString("ID"));             }
} catch (SQLException ex) {
Logger.getLogger(StudentDao.class.getName()).log(Level.SEVERE, null, ex);         }
return listID;
}

要从"未知"表中获取所有行和列,请执行以下操作:

public static List<Map<String, Object>> getAll(String tableName) {
if (! tableName.matches("\p{Alnum}\w*")) // to prevent SQL injection
throw new IllegalArgumentException("Invalid table name: " + tableName);
List<Map<String, Object>> result = new ArrayList<>();
try ( Connection cnx = conn.getConnection();
Statement stmt = cnx.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName); ) {
ResultSetMetaData metaData = rs.getMetaData();
while (rs.next()) {
Map<String, Object> row = new LinkedHashMap<>();
for (int column = 1; column <= metaData.getColumnCount(); column++)
row.put(metaData.getColumnName(column), rs.getObject(column));
result.add(row);
}
}
return result;
}

更改sql字符串以选择所有列,并在while循环中进行行映射。

您应该显式地选择所有列,如"select id,name,address from table",在生产模式中使用通配符*不是一个好方法。

最新更新