我刚刚开始学习 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>
<%} %>
我想知道是否有任何好的设置可以做到这一点并且更容易理解?任何帮助/建议将不胜感激!谢谢。
最佳答案
如果您只是检索单个属性的简单字符串,那么您建议的内容就可以完成这项工作。但是,如果您想使用数字或其他数据类型,您可能会遇到麻烦。您还需要重复迭代 ResultSet 以检索其他属性。
我使用以下内容:
ArrayList<LinkedHashMap<String, Object>>
ArrayList 为结果集中的每一行存储一个 LinkedHashMap。 LinkedHashMap 将每个属性名称(String 键)映射到该行的相应值(Object 值)。这为我提供了一个有序的结果列表,我可以在其中按名称检索每行的每个属性。使用对象而不是字符串可以让我根据需要转换结果。我一次就得到了所有这些。
以下演示了如何填充列表:
public Collection<String, Object> storeResults(ResultSet resultSet)
{
LinkedHashMap<String, Object> attValues = null;
ResultSetMetadata attValuesData = resultSet.getMetaData();
int attsInRow = attValuesData.getColumnCount();
ArrayList<LinkedHashMap<String, Object>> qryRslts = new ArrayList<>();
while (resultSet.next())
{
attValues = new LinkedHashMap<>();
/*
* Loop through attributes and store values in attValues.
* NOTE: Column numbering starts at 1!!!
*/
for (int attIndex = 1; attIndex <= attsInRow; attIndex++)
attValues.put(attValuesData.getColumnLabel(attIndex),
resultSet.getObject(attIndex));
qryRslts.add(attValues);
}
return qryRslts;
}
JDBC 非常冗长并且需要仔细的资源处理,因此如果您计划编写大量与数据库通信的软件,请考虑将常见功能(例如上面的功能)抽象到其自己的实用程序类中,并打包重复使用。如果您不想惹那么多麻烦,请考虑长期使用 Hibernate。
关于Java - 将 select 语句的结果存储在 arraylist 中是好还是坏方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530480/