web-dev-qa-db-ja.com

ResultSetをArrayListに配置する方法

"ResultSet"はArrayListと見なされますか?私はjdbcについて話している。いいえの場合、どのようにしてDBから取得した情報を

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

}

hotelResultのようなものと呼ばれるArrayListへの構文?

理解できたといいですね。

6
Adem Ökmen

いいえ、ResultSetはArrayListではなくテーブルと見なされます。たとえば、hotelResultのタイプが文字列の場合、このコードをリストに入力できます(ResultSetの列が文字列の場合)。

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

データ型ごとに、ResultSetから値を取得するメソッドがあります。さまざまな種類のメソッドについては、Java APIを参照してください。

4
Bart1612

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++));
   }
}

注:この例では、ホテル名など、クエリで単一の文字列が返されることを前提としています。各ホテルに関する複数のデータを保持したい場合があります。その場合は、「ホテル」オブジェクトを作成してから、Arrayオブジェクトをホテルオブジェクトのリストとして作成します。行マッパーを使用して、各ホテルオブジェクトに関連データを入力できます。

さらに、一般的なJDBCフレームワークの1つを使用してJDBC接続、クエリ、および結果セットを処理すると、プロセスをさらに簡略化できます。

12
Michael M

私はあなたを助けます:)!クラスで必要な変数を作成します私の例を参照してください:)

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メソッドを記述するだけです。

7
Bart1612

arrayList hotelsは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;
    }

}

}

0
Ahmed Emad

私のリストに追加されたデータベースの値を取得する方法を尋ねている場合、以下の解決策があります

  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();
    }
    _
0
Vikram B

最初の質問に答えるために、HotelDataクラスは本当に必要ありません。このクラスが行う唯一のことは、(特定のホテルごとに)1つのオブジェクトにデータを適切に保持することです。

それを自分の方法で実装する場合、uがhotelInfoリストにアイテムを格納する前に、すべての値を最初に文字列にキャストする必要があります(それらに文字列値が含まれていない場合)。これは、hotelInfoリストにString型があるためです。私の実装では、これも必要ありません(キャスト)。1つのString値と1つのint値を持つコンストラクターを作成したためです。

あなたの例を機能させたい場合は、次のように実装してください:

これではない:hotelInfo.add(result.getString( "hotelNo"));

しかし、このように:hotelInfo.add( "" + result.getInt( "hotelNo")); //ここのキャストに注意してください!

0
Bart1612