如何在数组列表中获取结果集的结果?

How to get the result of resultset in a arraylist?

我有一个方法 - read() - 我想在 ArrayList 中存储 resultSet。根据我的专栏名称,我还有一个 getter/setter class。如何将 resultSet 存储在 ArrayList 中?

public T read(T t) {
    if(t instanceof AddressData) {
        try
        {
            if(dbConnect.getConnectionStatus())
            {
                connection = dbConnect.openConnection();

            }
            else
            {
                throw new InstantiationException();
            }


             preparedStatement = (PreparedStatement) connection.prepareStatement("SELECT * FROM AddressData");
             resultSet = preparedStatement.executeQuery();
             while(resultSet.next())
             {
                   ((AddressData) t).setAddressId("addressId");
                   ((AddressData) t).setAddressLine1("addressLine1");
                   ((AddressData) t).setAddressLine2("addressLine2");
                   ((AddressData) t).setCity("city");
                   ((AddressData) t).setState("state");
                   ((AddressData) t).setCountry("country");
                   ((AddressData) t).setPinCode("pinCode");


             }


        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }

使用当前的方法签名,您可能无法做到。问题是您 return 只有 T 的一个实例,而不是 List<T>。更糟糕的是,您在作为参数给出的变量 t 上填充数据。

假设我了解您的需求,下面的代码应该是一个好的开始(假设所有字符串)。

public List<T> read (T t) {

    List<AddressData> addresses = new ArrayList<AddressData>();

    if (t instanceof AddressData) {
        try {
            if (dbConnect.getConnectionStatus()) {
                connection = dbConnect.openConnection();

            } else {
                throw new InstantiationException();
            }

            preparedStatement = (PreparedStatement) connection.prepareStatement("SELECT * FROM AddressData");
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                AddressData a = new AddressData();
                a.setAddressId("addressId"));
                a.setAddressLine1(resultSet.getString("addressLine1"));
                a.setAddressLine2(resultSet.getString("addressLine2"));
                a.setCity(resultSet.getString("city"));
                a.setState(resultSet.getString("state"));
                a.setCountry(resultSet.getString("country"));
                a.setPinCode(resultSet.getString("pinCode"));

                addresses.add(a);

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return addresses;

    } else {
        // ...?
    }

}

请注意,ResultSet 的每次迭代都会创建一个新的 AddressData 实例,并添加到 return 从该方法编辑的 List<AddressData> 中。如果 t 不是 AddressData 的实例,您应该重新考虑该怎么做,但这超出了您的问题范围。

我可能不明白你的问题,但如果你希望将结果存储在 AddressData 中,然后将其添加到 ArrayList,你可以这样做:

//...
resultSet = preparedStatement.executeQuery();
ArrayList addresses = new ArrayList<AddressData>();
AddressData aData;
while (resultSet.next()) {
    aData = new AddressData();

    // Store the results in aData
    aData.setAddressId(resultSet.getString("addressId");
    aData.setAddressLine1(resultSet.getString("addressLine1"));
    aData.setAddressLine2(resultSet.getString("addressLine2");
    aData.setCity(resultSet.getString("city");
    aData.setState(resultSet.getString("state"));
    aData.setCountry(resultSet.getString("country"));
    aData.setPinCode(resultSet.getString("pinCode"));

    // Add the data to our addresses list
    addresses.add(aData);
}
//...

我假设所有字段都是字符串。如果说 pinCode 不是一个字符串,而是一个整数,你必须使用 resultSet.getInt("pinCode") 作为你的 setter 函数的参数。