Java - 将 select 语句的结果存储在 arraylist 中是好还是坏方法?

标签 java arraylist

我刚刚开始学习 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/

相关文章:

java - 如何从 Android 向 Web 服务器发送多部分/表单数据?

java - Bouncy CaSTLe 中的 TLS-SRP 支持

java - LibGdx font.setColor(Color.WHITE) 不起作用

java - 使用@PathVariable将参数传递给Spring Controller

Java Float 添加到 ArrayList<T> 后变为 0.0

java - Swagger2 - 找不到用于 GET 的处理程序

java - (java) 无法检查 ArrayList 是否包含特定字符串

java - 使用自己的类在 ArrayList 中查找字符串值

java - 如何创建从单个节点相对于图中距离传播的边

java - 我如何在Android中实现 fragment 的通用ArrayList?