Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2257 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème de lecture de base de données SQLite (Java)

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de lecture de base de données SQLite (Java)

n°1943320
moystard
Posté le 23-11-2009 à 09:12:43  profilanswer
 

Bonjour à tous,
 
Pour un projet de cours, j'essaye de lire une table contenant des transactions. J'utilise le code suivant:

Code :
  1. /**
  2.      * Import pending transactions records from the database
  3.      * @return HashMap containing deposit and associated account
  4.      */
  5.     public HashMap<Deposit, Account> importPendingTransactions() {
  6.         HashMap<Deposit, Account> pendingTransactions = new HashMap<Deposit, Account>();
  7.         Statement stat = null;
  8.         try {
  9.             stat = dbConnection.createStatement();
  10.             ResultSet transactionRS = stat.executeQuery("SELECT * FROM " + PENDING_TRANSACTION_TABLE + ";" );
  11.             while (transactionRS.next()) {
  12.                 // Convert SQL Date to Java one.
  13.                 Date transactionDate = new Date(transactionRS.getDate(TRANSACTION_DATE).getTime());
  14.                 Deposit depositTransaction = new Deposit(transactionRS.getFloat(TRANSACTION_AMOUNT), transactionDate);
  15.                 ResultSet accountRs = stat.executeQuery("SELECT * FROM " + ACCOUNT_TABLE + " WHERE " + ACCOUNT_ID + "=" + transactionRS.getString(TRANSACTION_ACCOUNT) + ";" );
  16.                 Account userAccount = null;
  17.                 while (accountRs.next()) {
  18.                     userAccount = new Account(accountRs.getInt(ACCOUNT_ID), accountRs.getString(ACCOUNT_NUMBER), Account.ACCOUNT_TYPE.CREDITCARD_ACCOUNT, accountRs.getFloat(ACCOUNT_BALANCE));
  19.                 }
  20.                 accountRs.close();
  21.                 if (userAccount != null) {
  22.                     // Add transaction & account couple to the hashmap.
  23.                     pendingTransactions.put(depositTransaction, userAccount);
  24.                 }
  25.             }
  26.             // Close Accounts Result Set
  27.             transactionRS.close();
  28.         } catch (SQLException e) {
  29.             Logger.getAnonymousLogger().log(Level.SEVERE, "Failed to execute SQL request to import pending transactions: " + e.getLocalizedMessage());
  30.             return null;
  31.         } finally {
  32.             if (stat != null) {
  33.                 try {
  34.                     stat.close();
  35.                 } catch (SQLException ex) {
  36.                     // Ignore exceptions in finally
  37.                 }
  38.             }
  39.         }
  40.         Logger.getAnonymousLogger().log(Level.INFO, pendingTransactions.size() + " pending transactions imported." );
  41.         return pendingTransactions;
  42.     }


 
Mon problème c'est que la requête SQLite me retourne qu'une seule ligne, alors que quand je parcours manuellement la table à l'aide de sqlite3, j'ai des dizaines de transactions.
 
Si l'un d'entre vous peut m'aider là dessus. :jap:

mood
Publicité
Posté le 23-11-2009 à 09:12:43  profilanswer
 

n°1943341
cbeyls
Hail to the King, Baby
Posté le 23-11-2009 à 10:01:28  profilanswer
 

Je ne suis pas expert en SQLite mais, ce ne serait pas parce que tu fais une 2e requête au sein de la première, à partir du même Statement de la même connection? Le minimum serait de créer un nouveau statement pour la 2e requête.
 
Mais personnellement je te conseille de faire une seule requête avec une jointure de tables ce qui sera BEAUCOUP plus performant. Dans ce genre:
 
SELECT t.date, t.amount, ua.id, ua.number, ua.balance FROM transactions t, user_accounts ua WHERE t.user_account_id = ua.id


Message édité par cbeyls le 23-11-2009 à 10:34:52
n°1943676
moystard
Posté le 23-11-2009 à 17:28:54  profilanswer
 

Pourquoi je n'y ai pas pensé plus tôt! Le problème venait effectivement que j'utilisais le même statement pour les deux requêtes. Je devais être fatigué hier soir.
 
Merci aussi pour les conseils sur la jointure. C'est un projet scolaire donc je manipule peu de données, et les performances sont vraiment en second plan :jap:

n°1943758
cbeyls
Hail to the King, Baby
Posté le 23-11-2009 à 22:05:55  profilanswer
 

Les jointures c'est vraiment un minimum en SQL, surtout dans ce cas-ci où il est évident qu'il faut les utiliser. Sinon ton prof va penser que tu n'as rien compris à SQL. Et en plus, ça rend ton code plus simple.


Message édité par cbeyls le 23-11-2009 à 22:07:01

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème de lecture de base de données SQLite (Java)

 

Sujets relatifs
(DEBUTANT) Probleme de classe en c++problème de lecture d'un fichier texte
Problème configuration phpMyAdminMonitorer les accès en base de données MySQL
URGENT : problème shell windows boucle forProblème balises fichier swf
a l'aide: creation d'un objet prix et un serveur en JAVAProblème avec la fonction Unlink
Plus de sujets relatifs à : Problème de lecture de base de données SQLite (Java)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR