Java在arraylist中存储select语句的结果是好还是坏的方法?
我刚刚开始学习java中的SQL server 2008。所以我想知道使用这种方法是不是一种好方法?我实现了一个通用的arraylist方法,它将从数据库中获取值
public ArrayList<String> get(){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
ArrayList<String> a = new ArrayList<String>();
try {
// Register JDBC driver
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:sqlserver://localhost; database = Sample; Integratedsecurity = true");
String sql = "Select * from products";
stmt = conn.prepareStatement(sql);
// Extract all the records to see the updated records
rs = stmt.executeQuery();
while (rs.next()) {
// Retrieve data by column name in your database
a.add(rs.getString("ProductName"));
}
rs.close();
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return a;
}
这个好还是不好?然后在展示的时候
ArrayList<String> a = new ArrayList<String>();
String productName = !request.getParameter("productName").isEmpty() ? request.getParameter("productName") : "Empty";
d.addProduct(productName);
a = d.get();
Iterator<String> it = a.iterator();
while(it.hasNext()){%>
<% String baba = (String)it.next(); %>
<p>Product: <%= baba %></p>
<%} %>
我想知道这样做是否有什么好的设置,是否更容易理解?任何帮助/建议都将不胜感激!谢谢
# 1 楼答案
这很好
即使结果集的行较大,这种方法也能很好地工作。然后将每一行变成某种对象,并将其添加到数组列表中
如果由于内存限制,无法检索所有行,但仍要添加要返回到此类集合的行,则可能无法很好地工作
# 2 楼答案
如果您只是为单个属性检索简单字符串,那么您的建议将起到作用。然而,如果你想处理数字或其他数据类型,你可能会遇到麻烦。您还需要反复迭代ResultSet以检索其他属性
我使用以下方法:
ArrayList为结果集中的每一行存储一个LinkedHashMap。LinkedHashMap将每个属性名(字符串键)映射到对应行的值(对象值)。这给了我一个有序的结果列表,我可以在其中按名称检索每行的每个属性。使用对象而不是字符串可以根据需要转换结果。我一次就搞定了
下面演示了如何填充列表:
# 3 楼答案
为什么不使用hibernate自动将结果绑定到某个对象(可能是^{)
此外,这将是一个很好的经验,值得学习,如果需要的话。网上有很多东西,也许stackoverflow本身就足够了
# 4 楼答案
为了“更容易处理”查询结果,我过去也做过类似的事情。随着时间的推移,我不再使用它,因为它的代码比实际需要的更多。这也让事情变得更复杂
在您的方法中,不存储数据库返回的数据类型。这只是“字符串”。我过去也这么做过——我不建议
所以我的建议是:在第一种方法中使用纯jdbc功能。如果你明白这一点,并使用了一段时间,看看jpa