java - 将 ResultSet 分配给类中的变量

标签 java mysql resultset

我有以下功能:

public Map<Integer, Product> fetchAllProducts() {

  Map<Integer, Product> pArr = new HashMap();
  try {
     Statement st = conn.createStatement();
     ResultSet rs = st.executeQuery("SELECT id, intro, content, price FROM Product");
     while (rs.next()) {
       pArr.put(rs.getInt("id"), new Product(rs));
     }
     st.close();
  } catch (SQLException ex) {
   //...
  }
  return pArr;
}

它从 mySQL 表 Product 中获取所有行,并为每一行创建一个新的 Product 类。产品构造器:

 public Product(ResultSet rs) {
    try {
       price = rs.getInt("price");
       content = rs.getString("content");
       intro = rs.getString("intro");
    } catch (SQLException ex) {
       //...
    }
   }

我的问题是:是否有更好的方法将结果列分配给 Product 中的变量?代码 price = rs.getInt("price"); 等等似乎是多余的,不是吗?完美的是,如果我将查询语句更改为 SELECT intro, content, tax, delivery FROM ... 构造器会自动将其分配给适当的变量(即 intro、content、tax、delivery)在构造函数中。这可以用 Java 完成还是我只是在做梦?

最佳答案

首先:您真的不应该将ResultSet 传递给Product 的构造函数!您应该清楚地将数据库访问代码与业务逻辑分开。

所以通常我希望在您的代码中看到这一点:

private static final String TABLE_NAME = "product";
private static final String ID_COLUMN = "id";
private static final String INTRO_COLUMN = "intro";
private static final String CONTENT_COLUMN = "content";
private static final String PRICE_COLUMN = "price";

private static final String FETCHALLPRODUCTS_QUERY = String.format("SELECT %s, %s, %s, %s FROM %s", ID_COLUMN, INTRO_COLUMN, CONTENT_COLUMN, PRICE_COLUMN, TABLE_NAME);

public Map<Integer, Product> fetchAllProducts() {

  Map<Integer, Product> pArr = new HashMap();
  try {
     Statement st = conn.createStatement();
     ResultSet rs = st.executeQuery(FETCHALLPRODUCTS_QUERY);
     while (rs.next()) {
        Integer price = rs.getInt(PRICE_COLUMN);
        String content = rs.getString(CONTENT_COLUMN);
        String intro = rs.getString(INTRO_COLUMN);

        Product product = new Product(price, content, intro);
        Integer id = rs.getInt(ID_COLUMN);
        pArr.put(id, product);
     }
     st.close();
  } catch (SQLException ex) {
   //...
  }
  return pArr;
}

但要回答您的问题:在处理普通 JDBC 时,这样做是一种非常常见的做法。您正在寻找的是 ORM类似 Hibernate 的框架.

在使用 JDBC 连接时,我正在做的一件事是为列名和表名声明常量。在我看来,这样会更干净一些。

关于java - 将 ResultSet 分配给类中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346793/

相关文章:

java - 如何使用resultset输出SQL SUM语句?

java - 通过 JAVA 使用临时表从 MSSQL DB 获取数据

java - Runtime.getRuntime().exec ("ls"没有输出)

Java Hibernate java.lang.IllegalArgumentException : Parameter value did not match expected type

java - 使用 CellRenderer 在 JTabel 列中使用复选框而不是 boolean 值

MySql 数据库密码

scala - 像处理 Scala 流一样处理 SQL 结果集

Java AWT Graphics 改变drawString()的背景颜色

mysql - VB.NET MySqlDataAdapter.Fill 大约需要 6-7 秒

PHP,SQL多表