ResultSet如何将其放入ArrayList中

时间:2014-09-30 18:09:21

标签: java jdbc resultset

“ResultSet”是否被视为ArrayList?我在谈论jdbc。如果没有,那么 如何使用

输入我从数据库中获取的信息
while (result.next()) {
....

}

语法到一个名为hotelResult的ArrayList?

我希望这是可以理解的。

6 个答案:

答案 0 :(得分:11)

ResultSet不是ArrayList。相反,它是一个特殊的对象(接口)来保存通过JDBC连接查询检索的数据。

无法更新ResultSet对象,只能向前遍历...而不能返回。默认情况下,您只能迭代一次,从第一行到最后一行(虽然通过一些编码,您可以生成一个可以编辑和双向遍历的ResultSet对象。)

存储在ResultSet对象中的记录可以轻松放置在ArrayList中。以下是如何执行此操作的示例:

Connection con = ... ;
Statement stmt = ... ;
ResultSet results = stmt.executeQuery("..."); 

//Stores properties of a ResultSet object, including column count
ResultSetMetaData rsmd = rs.getMetaData(); 
int columnCount = rsmd.getColumnCount();

ArrayList<String> hotelResultList = new ArrayList<>(columnCount); 
while (results.next()) {              
   int i = 1;
   while(i <= columnCount) {
        hotelResultList.add(results.getString(i++));
   }
}

注意:此示例假定在查询中返回单个String,例如酒店名称。您可能希望保存关于每个酒店的多个数据,在这种情况下,您将创建一个“酒店”对象,然后将ArrayList创建为酒店对象列表。使用行标记,可以使用关联数据填充每个酒店对象。

此外,使用一种流行的JDBC框架来处理JDBC连接,查询和结果集可以进一步简化该过程。

答案 1 :(得分:7)

我会帮助你:)! 在类中创建所需的变量,请参阅我的示例:)

public class HotelData {
    private String hotelName = null;
    private int hotelTelephone = 0;

    public HotelData(String hotelName, int hotelTelephone) {
    this.hotelName = hotelName;
    this.hotelTelephone = hotelTelephone;
    }
}

现在创建ArrayList:

public ArrayList<HotelData> hotelResult = new ArrayList<HotelData>();

现在使用while方法:

while(result.next()) {
    hotelResult.add(new HotelData(result.getString("Enter columnname"), result.getInt("Enter colummname")));
}

希望这会帮助你好友:)!如果你需要从ArrayList获取数据,你可以简单地在HotelData类中编写你自己的get方法!

答案 2 :(得分:2)

不,ResultSet不被视为ArrayList,而是一个表。 例如,如果hotelResult具有String类型,则可以使用此段代码填充列表(如果ResultSet中的列是String)。

while(result.next()) {
  hotelResult.add(result.getString("Enter the columnname here");
}

对于每种数据类型,都有一种从ResultSet中获取值的方法。 在Java API中查找不同类型的方法。

答案 3 :(得分:0)

要回答你的第一个问题,你真的不需要HotelData类。 这个类唯一能做的就是在一个Object中保存数据(对于每个特定的酒店)。

如果按照自己的方式实现,则必须先将所有值强制转换为Strings(如果它们不包含String值),然后才能将项目存储在hotelInfo列表中。这是因为hotelInfo列表具有String类型,在我的实现中,这也是不需要的(转换)因为我创建了一个具有一个String值和一个int值的构造函数。

如果您希望您的示例能够像以下那样实现它:

不是这样的:hotelInfo.add(result.getString(“hotelNo”));

但是像这样:hotelInfo.add(“”+ result.getInt(“hotelNo”)); //注意演员阵容!

答案 4 :(得分:0)

如果您问我如何获取添加到列表中的数据库值。这是下面的解决方法

  1. pom.xml文件添加到依赖关系的片段下面

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
    
  2. 从主程序中调用该方法。

    List output =  readRows(rs);
    

    这里rsResultSet对象,readRows()是方法

  3. 下面是readRows()方法的代码段

    private static List<List<Object>> readRows(ResultSet rs) throws SQLException
    {
        ImmutableList.Builder<List<Object>> rows = ImmutableList.builder();
        int columnCount = rs.getMetaData().getColumnCount();
        while (rs.next()) {
            List<Object> row = new ArrayList<>();
            for (int i = 1; i <= columnCount; i++) {
                row.add(rs.getObject(i));
            }
            rows.add(row);
        }
        return rows.build();
    }
    

答案 5 :(得分:0)

我相信这将清除-ArrayList酒店拥有HotelDtos的对象

public class HotelDto {
private String hotelName;
private String hotelAddress;

private int hotelRank;

public String getHotelName() {
    return hotelName;
}

public void setHotelName(String hotelName) {
    this.hotelName = hotelName;
}

public String getHotelAddress() {
    return hotelAddress;
}

public void setHotelAddress(String hotelAddress) {
    this.hotelAddress = hotelAddress;
}

public int getHotelRank() {
    return hotelRank;
}

public void setHotelRank(int hotelRank) {
    this.hotelRank = hotelRank;
}

}

public class HotelDao {

public List<HotelDto> getHotlInfo(String hotelName) {

    List<HotelDto> hotels = new ArrayList<HotelDto>();
    try {

        String query = "SELECT  hotelName, hotelAddress,hotelrank " + "FROM   HOTELS_TABLE "
                + "WHERE hotelName = " + "'" + hotelName + "'" + " ";

        ResultSet resultSet = DBConnection.getDBConnection().createStatement().executeQuery(query);

        int i = 0;

        while (resultSet.next()) {

            HotelDto hDto = new HotelDto();
            hDto.setHotelName(resultSet.getString(1));
            hDto.setHotelAddress(resultSet.getString(2));
            hDto.setHotelrank(resultSet.getInt(3));
            hotels.add(i, hDto);
            i++;
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        return hotels;
    }

}

}