如何在数组列表中获取结果集的结果?
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 函数的参数。
我有一个方法 - 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 函数的参数。