[JAVA] Récupérer valeurs dans une BD MySQL

Fermé
algelos Messages postés 14 Date d'inscription mardi 22 mars 2011 Statut Membre Dernière intervention 15 janvier 2014 - Modifié par algelos le 15/07/2011 à 14:35
 sqdsq - 21 déc. 2012 à 16:18
Bonjour,

Voici un problème qui devrait être assez facile à résoudre pour quelqu'un qui s'y connait, mais ce n'est pas mon cas :P.

J'ai une table appelée incompatibilite dans ma BD, et je voudrais récupérer ses valeurs pour en faire un traitement. Je récupère ces valeurs dans une liste, de cette manière :

public List<Incompatibilite> findAllIncompatibilites(){
String oql;
Query query;
oql = "SELECT c" +
" FROM Incompatibilite c";

query = em.createQuery(oql);

return (List<Incompatibilite>)query.getResultList();
}

Le soucis, c'est que même si ce code fonctionne, il me renvoie une liste vide! Pourtant ma table n'est pas vide..
Je ne comprend pas bien d'où peut venir mon erreur. Ma table porte un "i" minuscule tandis que ma requête est en majuscule, mais avec un "i" minuscule cela plante...

Quelqu'un pourrait-il m'aider?

Merci d'avance !


A voir également:

4 réponses

algelos Messages postés 14 Date d'inscription mardi 22 mars 2011 Statut Membre Dernière intervention 15 janvier 2014
18 juil. 2011 à 09:51
Petit UP?

Je pense que ce n'est pas grand chose, mais n'arrive pas à voir quoi...

Après moultes tests, je pense qu'il n'arrive pas à piocher des infos dans ma table incompatibilite...

Si je fais :
SELECT c.id FROM Cadre c

Cela me renvoie une liste contenant 5id, contenus dans ma table cadre.

Par contre, ayant un champ id également dans ma table incompatibilite, lorsque je fais :
SELECT c.id FROM Incompatibilite c

Cela me renvoie une liste vide. Je n'ai aucune erreur, il arrive donc bien à trouver ma table, mais ne pioche aucune info dedans. Ais-je une mise à jour à faire lorsque je modifie des tables? Je pense que cela doit être plutot simple, mais je ne trouve pas la cause de cette erreur.

Merci d'avance !
0
Logitux Messages postés 102 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 28 septembre 2011 8
18 juil. 2011 à 10:52
Personnellement j'ai fait comme ça (repris du site du zero)
(Par contre moi c'est pas oql...)
Je ne code pas beaucoup en Java du coup c'est possible que certaines choses peuvent être optimisée.
En espérant que ça puisse t'aider

     public void callDB(){
         id_entreprise.removeAll(id_entreprise);
         nom_entreprise.removeAll(nom_entreprise);

        try {
		Class.forName("org.gjt.mm.mysql.Driver");
		//System.out.println("DRIVER entreprise OK ! ");

                String url = "jdbc:mysql://localhost:3306/myDB";
		String user = "root";
		String passwd = "mondepasse";

		Connection conn = DriverManager.getConnection(url, user, passwd);
		//System.out.println("Connection effective !");

                //Création d'un objet Statement
		Statement state = conn.createStatement();
		//L'objet ResultSet contient le résultat de la requête SQL
		ResultSet result = state.executeQuery("SELECT id_entreprise, nom_entreprise FROM t_entreprise ORDER BY nom_entreprise ASC");
		//On récupère les MetaData
		ResultSetMetaData resultMeta = result.getMetaData();

		
		for(int i = 1; i <=  resultMeta.getColumnCount(); i++){
			while(result.next()){
                                id_entreprise.add(result.getInt("id_entreprise"));
                                nom_entreprise.add(result.getString("nom_entreprise"));
			}
                }

                        result.close();
                        state.close();
                        
	} catch (Exception e) {
            	//e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Impossible de se connecter à la base de données", "Attention", JOptionPane.WARNING_MESSAGE);
	}

         
     }
0
Bonjour,
D'après le bout de code que tu mets, tu travailles avec JPA qui est le système de persistence java.

Ceci veut dire que tu doit avoir une classe annotée par @Entity qui porte le nom
Incompatibilite avec un I majuscule comme nom de classe.
Déjà, vérifie que cette classe contient bien des champs (non annotés @Transient)
Ce sont ces champs qui sont traduits en colonnes par JPA.
Par contre, JPA crée la table tout en minuscule, c'est normal.
La requête que tu donnes :
SELECT c FROM Incompatibilite  c

n'est pas du SQL mais du JPQL, c'est à dire des requêtes "objet"
En SQL, on aurait écrit :
SELECT c.* FROM incompatibilite c

Tu dis que ta table contient des champs, donc si avec phpmyadmin tu fais :
SELECT * FROM incompatibilite
tu obtiens bien des lignes ?
Si les 2 précédentes sont ok, alors vérifie le fichier persistence.xml qui doit contenir une ligne du genre :
<class>xxx.yyy.Incompatibilite</class>

Où xxx et yyy sont des noms de package java (regarde dans le fichier Incompatibilite.java la ligne qui commence par "package"
Si ça marche avec Cadre, recopie la ligne puis remplace dans la copie "Cadre" par Incompatibilite".

Voilà des pistes, à ton tour !
Cordialement
0
d

                
0