如何在arraylist中获得结果集的结果?

时间:2015-02-21 11:22:13

标签: java jdbc collections

我有一个方法 - read() - 我希望商店resultSet位于ArrayList。根据我的列名,我也有一个getter / setter类。如何将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();
        }

    }

2 个答案:

答案 0 :(得分:0)

使用当前的方法签名,您可能无法做到。问题是您只返回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 {
        // ...?
    }

}

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

答案 1 :(得分:0)

我可能无法理解您的问题,但如果您希望将结果存储在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不是字符串,而是int,则必须使用resultSet.getInt("pinCode")作为setter函数的参数。