Java 结果设置如何将其放入ArrayList

Java 结果设置如何将其放入ArrayList,java,jdbc,resultset,Java,Jdbc,Resultset,“ResultSet”是否被视为ArrayList?我说的是jdbc。如果没有,那么 如何使用 while (result.next()) { .... } 语法转换为一个名为hotelResult的ArrayList 我希望这是可以理解的。不,ResultSet不被视为ArrayList,而是一个表。 例如,如果hotelResult具有字符串类型,则可以使用这段代码填充列表(如果ResultSet中的列是字符串) 对于每个数据类型,都有一个从ResultSet获取值的方法。 在Java

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

while (result.next()) {
....

}
语法转换为一个名为hotelResult的ArrayList


我希望这是可以理解的。

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

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

结果集不是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 = results.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++));
   }
}
连接con=;
语句stmt=;
ResultSet results=stmt.executeQuery(“…”);
//存储ResultSet对象的属性,包括列计数
ResultSetMetaData rsmd=results.getMetaData();
int columnCount=rsmd.getColumnCount();
ArrayList hotelResultList=新的ArrayList(columnCount);
while(results.next()){
int i=1;
而(我将帮助你:)!
在类中创建所需的变量(请参见我的示例:)

现在创建ArrayList:

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

希望这能帮助你,伙计:)!如果你需要从ArrayList获取数据,你只需在HotelData类中编写你自己的get方法!

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

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

如果您想让您的示例工作,请执行以下操作:

不是这个:hotelInfo.add(result.getString(“hotelNo”)


但是像这样:hotelInfo.add(“+result.getInt”(“hotelNo”);//注意这里的强制转换!

如果您问我如何获得添加到列表中的数据库值,下面是解决方案

  • xml文件添加下面的依赖项片段

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
    
    这里
    rs
    ResultSet
    对象,
    readRows()
    是方法

  • 下面是
    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();
    }
    
    private static List readRows(ResultSet rs)抛出SQLException
    {
    ImmutableList.Builder行=ImmutableList.Builder();
    int columnCount=rs.getMetaData().getColumnCount();
    while(rs.next()){
    列表行=新的ArrayList();
    
    对于(inti=1;i我相信这将清除-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;
    }
    
    }

    公共类酒店{
    公共列表getHotlInfo(字符串hotelName){
    列出酒店=新建ArrayList();
    试一试{
    String query=“从HOTELS\u表中选择hotelName、hotelAddress、hotelrank”+”
    +“WHERE hotelName=“+””“+hotelName+”“+”;
    ResultSet ResultSet=DBConnection.getDBConnection().createStatement().executeQuery;
    int i=0;
    while(resultSet.next()){
    HotelDto hDto=新的HotelDto();
    setHotelName(resultSet.getString(1));
    setHotelAddress(resultSet.getString(2));
    hDto.setHotelrank(resultSet.getInt(3));
    添加(i,hDto);
    i++;
    }
    }捕获(例外情况除外){
    例如printStackTrace();
    }最后{
    返回酒店;
    }
    }
    

    }

    你做的很辛苦:手工构建,只需在结果集上迭代并将所有元素添加到ArrayList中。嗯……我不确定是如何完成的。我是java新手。比方说,我想将hotelNo添加到ArrayList中。我使用什么语法?我真的不知道:/谢谢你的快速回答!:)可能会有帮助。列出的超级接口只有
    Autocloseable
    Wrapper
    ,而an有一个完全不同的接口列表。(请查看
    ArrayList.add
    )因此,换句话说,不,ResultSet不是数组列表。这里有一个。如果您询问添加到arraylist的语法:hotelResult.add()好的,我想我明白了。嗯……现在我有另一个问题。我的老师让我把数据库中的一些信息放到ArrayList中。我现在想我知道如何处理只有字符串的情况,但我有字符串,Int和(var)Char.我如何才能将这些信息放入一个Arraylist?@AdemÖkmen创建一个具有信息属性的对象,为
    结果集
    中的一行创建一个对象,并将其添加到列表中。是的,就像Mark Rotterveel所说的那样。在HotelData类中创建一个名为HotelData的类,创建字符串和int的变量。就我所知,varchar和String是一样的:)@AdemÖkmen在Michael M的帖子下看到我的帖子。啊,太好了。非常感谢!只有一个问题:我在没有hotelData类的情况下让它工作了?为什么我们需要它?我这样做:
    ArrayList hotelInfo=new ArrayList();而(result.next()){hotelInfo.add(result.getString(“hotelNo”));//当它是一个INT而不是字符串时,它是如何工作的呢?hotelInfo.add(result.getString(“hotelName”);hotelInfo.add(result.getString(“city”);System.out.println(hotelInfo);}
    再次编辑:对不起,我不知道如何格式化代码,所以在这里看起来不错
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
    
    List output =  readRows(rs);
    
    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();
    }
    
    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;
        }
    
    }