【问题标题】:how to return the result of (SELECT * FROM TABLE) in a DAO Class如何在 DAO 类中返回 (SELECT * FROM TABLE) 的结果
【发布时间】:2020-04-18 00:56:17
【问题描述】:

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

这个类只返回一个列表(一列)我不知道如何改变它,所以它可以返回一个对象(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;
    }

【问题讨论】:

  • 您能解释一下您需要编写此 DAO 的原因吗? (学校作业的要求可能与实际用途有很大不同。)
  • 你有一个类来表示你想要返回的对象吗?

标签: java


【解决方案1】:

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

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;
}

【讨论】:

    【解决方案2】:

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

    您应该明确选择所有列,例如“从表中选择 id、名称、地址”,在生产模式下使用通配符 * 不是一个好方法。

    【讨论】:

    • 我知道,但是该类将返回仅包含一个列的列表: listID.add(res.getString("ID")); getString 方法只接受一个参数,我需要该类返回所有列“ID”“NAME”“GRADE”“GROUPE”)..
    • while (res.next()) { Student s = new Student() s.setID(res.getString("ID") ) s.setName((res.getString("NAME") ) 像这样
    • 我需要返回“ID”“NAME”“GRADE”“GROUPE”---所有这些......不仅仅是“ID”
    • 更新评论。全部在while循环中。
    • 谢谢,在主课上,请教如何创建一个迭代来读取所有结果案例 5:newStudent = StudiantsDao.getAllDetails(); System.out.println("学生名单 + .... ....); break;
    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 2016-08-12
    • 2015-05-15
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多