我有一个方法 - 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();
}
}
答案 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函数的参数。