web-dev-qa-db-fra.com

ResultSet comment le mettre dans un ArrayList

Est-ce que "ResultSet" est considéré comme une ArrayList? Je parle de jdbc. Si non, alors Comment puis-je mettre les informations que je reçois de ma base de données en utilisant le 

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

}

syntaxe dans une ArrayList appelée quelque chose comme hotelResult?

J'espère que c'était compréhensible.

4
Adem Ökmen

Non, ResultSet n'est pas considéré comme une liste de tableaux, mais plutôt comme un tableau. Si hotelResult, par exemple, a le type de chaîne, vous pouvez remplir la liste avec ce morceau de code (si la colonne de ResultSet est une chaîne).

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

Pour chaque type de données, il existe une méthode permettant d'extraire la valeur de ResultSet. Recherchez dans l'API Java les différents types de méthodes.

2
Bart1612

Un ResultSet n'est pas une ArrayList. Il s'agit plutôt d'un objet spécial (Interface) pour stocker les données extraites par des requêtes via des connexions JDBC.

Un objet ResultSet ne peut pas être mis à jour et peut uniquement être parcouru en avant ... pas en arrière. Par défaut, vous ne pouvez le parcourir qu'une fois, de la première à la dernière ligne (mais avec un peu de codage, vous pouvez générer un objet ResultSet pouvant être édité et parcouru dans les deux sens).

Les enregistrements stockés dans un objet ResultSet peuvent facilement être placés dans une ArrayList. Voici un exemple sur la manière de procéder:

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

REMARQUE: Cet exemple suppose qu'une seule chaîne soit renvoyée dans la requête, telle qu'un nom d'hôtel. Vous souhaiterez probablement conserver plusieurs données sur chaque hôtel. Dans ce cas, vous créerez un objet "Hôtel", puis ArrayList en tant que liste d'objets Hôtel. En utilisant un Rowmapper, chaque objet d’hôtel peut être rempli avec les données associées.

De plus, l'utilisation de l'un des frameworks JDBC les plus populaires pour gérer les connexions, les requêtes et les ensembles de résultats JDBC peut simplifier davantage le processus.

10
Michael M

Je vais vous aider :)! Créez les variables nécessaires dans la classe, voir mon exemple :)

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

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

Maintenant, créez la liste de tableaux:

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

Avec la méthode while maintenant:

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

J'espère que cela vous aidera, mon pote :)! Si vous devez récupérer les données de ArrayList, vous pouvez simplement écrire vos propres méthodes get dans la classe HotelData!

6
Bart1612

Pour répondre à votre première question, vous n’avez pas vraiment besoin de la classe HotelData. La seule chose que cette classe fait est de conserver les données bien et propres dans un objet (pour chaque hôtel spécifique).

Si vous l'implémentez à votre manière, vous devez d'abord convertir toutes les valeurs en chaînes (si elles ne contiennent pas de valeurs de chaîne) avant de pouvoir stocker vos éléments dans la liste hotelInfo. En effet, la liste hotelInfo a le type String. Dans mon implémentation, cela n’est pas non plus nécessaire (les conversions), car j’ai créé un constructeur avec une valeur String et une valeur int.

Si vous voulez que votre exemple fonctionne, implémentez-le comme ceci:

pas ceci: hotelInfo.add (result.getString ("hotelNo")); 

mais comme ceci: hotelInfo.add ("" + result.getInt ("hotelNo")); // Remarque le casting ici!

0
Bart1612