gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:23:29 25 4
gpt4 key购买 nike

我有以下功能:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com