IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Requêtes prédédinies pour Mysql


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut Requêtes prédédinies pour Mysql
    Bonjour,
    J'aimerais de construire des "maquettes" de requête qui contiennent tous les mots clés et où il ne reste plus qu'à demander les tables qu'on veut interroger et les colonnes que l'on souhaite afficher.
    L'idée est de pouvoir implémenter dans une classe des méthodes permettant de faire des requêtes SQL que l'utilisateur ne connaît pas.

    Par exemple, pour une requête "SELECT nom, prenom FROM TAB_client" je veux pouvoir récupérer la saisie de l'utilisateur qui va me donner les champs qu'il veut afficher et la table.

    J'ai essayé de mettre en place des preparedStatement mais Eclipse me dit qu'il y a des erreurs liées à la variable de connection.

    Je ne saisis pas bien la syntaxe qu'il faut pour avoir un preparedStatement correct dans une classe ne contenant pas de main() ni quels sont les arguments que la méthode doit retourner.

    Pour le moment j'arrive juste à appeler une requête mais je ne peux rien récupérer de l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public class Requetes {
    	public static ResultSet AfficheNBpatient(Statement st){
    		int i= 0;
     
    		try {
    			ResultSet rs = st.executeQuery("SELECT * FROM tab_patient");
    			while (rs.next()) {
    				String colonne1 = rs.getString(1);
    				String colonne2 = rs.getString(2);
    				String colonne3 = rs.getString(3);
    				String colonne4 = rs.getString(4);
    				String colonne5 = rs.getString(5);
     
    				System.out.println(colonne1+"|"+colonne2+"|"+colonne3+"|"+colonne4+"|"+colonne5+"|");
    				i++;
    			}
    			System.out.println("il y a " + i + " lignes de trouvées.");
     
    // déconnexion de la base
    			rs.close();
    			st.close();
     
    			return rs ; 
    			} catch (SQLException e) {
    				e.printStackTrace();
    				return null;
    			}		
    	}
    }
    cette classe est appelée dans le main pour alléger au maximum le main et tenter de faire des classes.

    Merci de votre aide!

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il n'y a pas de preparedStatement dans ton code là, quel message d'erreur tu as exactement?

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut
    voici ce que je viens d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class requetePredef {
     
    	public PreparedStatement SelectAll(Connection dbC) {
     
    		try {
    			PreparedStatement ps = dbC.prepareStatement("SELECT champ=? FROM table=? ");
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
     
    		return ps ;
     
    	}
    }
    ici ps n'est pas reconnu comme objet de type PreparedStatement ;

    et comme le code est construit, je ne sais pas comment je peux remplir les "?" par le biais de variables.

    Je pense que je n'ai rien compris à ces prepared statement.

    Merci.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    bon déjà dans un preparedStatement, tu ne peux mettre des paramètres que sur les valeur:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select champ1,champ2,champ3 from maTable where champ4=?
    Pas de nom de champ ou de nom de table en paramètre.

    ensuite on utilise PreparedStatement.setXXXX(1,valeur) pour donner une valeur à ?

    Ensuite, laisser le client choisir la table et les champs, mauvais plan, je vais vite avoir fait de choisir table_name comme champ et information_schema.tables comme table moi....

  5. #5
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut
    Citation Envoyé par tchize_ Voir le message

    laisser le client choisir la table et les champs, mauvais plan, je vais vite avoir fait de choisir table_name comme champ et information_schema.tables comme table moi....
    Merci de ta réponse, pour ce qui est que le client choisisse les champs qu'il veut c'est presque nécessaire. En effet, l'idée est qu'à travers un choix délimité il puisse faire apparaître les informations dont il a besoin.

    Je pense par exemple à :

    Je suis l'utilisateur de la base, et je veux que toutes les informations concernant une recherche apparaissent parce qu'elles me sont toutes utiles. Je recherche donc par code article tous les clients qui sont associés à cet article et je veux tout savoir ce qui est rattaché à cet article en question. à ce moment j'utilise toutes les tables et tous les champs on est d'accord.

    Mais admettons que maintenant je ne veuille que certaines informations exemple uniquement les numéros de téléphones, ou uniquement les articles associés sans les noms mais ça peut être d'autres choses auxquelles moi, le constructeur du code de requêtes, je ne pense pas forcément mais je veux laisser une certaine latitude pour que les requêtes puissent être faites.

    Est-ce que c'est possible? ou est-ce que je dois faire pour chaque possibilité une méthode?

  6. #6
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut
    Dans PreparedStatement.setXXXX(1,valeur) le 1 correspond à quoi?

    Mes questions sont ptêt bêtes mais je ne trouve pas d'explication claire et simple pour les nuls...

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Grem974 Voir le message

    Mais admettons que maintenant je ne veuille que certaines informations exemple uniquement les numéros de téléphones, ou uniquement les articles associés sans les noms mais ça peut être d'autres choses auxquelles moi, le constructeur du code de requêtes, je ne pense pas forcément mais je veux laisser une certaine latitude pour que les requêtes puissent être faites.
    Ben tu fais l'inventaire des tables et colonne qu'on peux demander et tu fais une belle liste pour l'utilisateur, et tu fais une méthode entre le client et ton serveur dont le boulot est de traduire ces choix en requêtes SQL. De toutes façons si tu donne directement des noms de colonne ou de table à l'utilisateur, il va rien comprendre...
    Est-ce que c'est possible? ou est-ce que je dois faire pour chaque possibilité une méthode?[/QUOTE]

    Citation Envoyé par Grem974 Voir le message
    Dans PreparedStatement.setXXXX(1,valeur) le 1 correspond à quoi?

    Mes questions sont ptêt bêtes mais je ne trouve pas d'explication claire et simple pour les nuls...
    Ca me semble assez clair dans la doc, c'est l'index du paramètre:
    http://docs.oracle.com/javase/7/docs...a.lang.String)

Discussions similaires

  1. [MySQL] Requête valide pour MySQL & PostgreSQL
    Par aDenis dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/11/2010, 17h47
  2. Gestion des requêtes parametrées pour MySQL 5 sous VB6
    Par thomasarnelmadiso dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 25/01/2008, 11h55
  3. modifier une requête pour mysql 4.0.18
    Par lina01 dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/11/2006, 11h38
  4. EDBEngineError sur une requête pour MySQL
    Par Slyteck dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/08/2006, 14h17
  5. Parser une requête SQL pour MySQL
    Par gassla dans le forum SGBD
    Réponses: 3
    Dernier message: 02/08/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo