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 :

[debutant] Java et MySQL


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Points : 54
    Points
    54
    Par défaut [debutant] Java et MySQL
    Bonjour

    Je suis toujours entrain de développer une applet.
    J'ai installé correctement (enfin je pense) ce qu'il faut pour pouvoir utiliser correctement une base de données.
    J'ai trouvé sur ce site un tutoriel expliquant comment utiliser les db avec Java.

    J'explique ce que j'ai fait
    j'ai une liste contenant les 7 jours de la semaine. Lorsque l'utilisateur clic sur un des jours, cela affiche dans une autre liste les absents de ce jour la.
    Donc j'ai mis dans ma liste des jours un ActionListener qui fait appel à la classe s'occupant de la db.
    Mon problème est comment renvoyer le résultat de la requête à la méthode appelante afin d'afficher le résultat dans la seconde liste?
    voici l'ensemble de mes codes

    Methode appelante (pour le moment y a pas de requete definie mais cela sera un select)
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Container;
    import java.text.DateFormat;
    import java.util.Date;
     
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class semaine1Panel extends JPanel {
     
    	public semaine1Panel() {
    	    JLabel jlabel1 = new JLabel("Sont absents ce jour");
    	    JLabel jlabel2 = new JLabel("Les jours de la semaine");
     
    	    /* listbox de droite contenant les jours de la semaine */
    	    List joursem = new List(6);
    	    joursem.add("Lundi");
    	    joursem.add("Mardi");
    	    joursem.add("Mercredi");
    	    joursem.add("Jeudi");
    	    joursem.add("Vendredi");
    	    joursem.add("Samedi");
    	    joursem.add("Dimanche");
    	    joursem.addActionListener(new ActionListener()
    		{
    	    	public void actionPerformed(ActionEvent e)  {
    	    		basededonnees bd = new basededonnees();
    	    	}
    		});
     
     
    	    /* disposition à l'écran des éléments de l'interface */
    	    setLayout(null);
    	    addComponent(jlabel1, 17,45,154,18); 
    	    addComponent(jlabel2, 777,45, 154, 18);
    	    addComponent(joursem, 780, 75, 154, 128);
     
     
    	}
    	private void addComponent ( Component c, int x, int y, int width, int height)
    	{
    		c.setBounds(x,y,width,height);
    		add(c);
    	}
    }
    Maintenant le code de la classe pour la db
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    import java.sql.*;
    import java.io.*;
     
    public class basededonnees {
    	static String syntaxe="pg PILOTE URL UID MDP";
    	public static void main(String arg[])
    	{
     
    //			 init paramètres de la connexion
    			Connection connect=null;
     
     
    //			 autres données
    			Statement S=null; // objet d'émission des requêtes
    			ResultSet RS=null; // table résultat d'une requête d'interrogation
    			String sqlText; // texte de la requête SQL à exécuter
    			int nbLignes; // nb de lignes affectées par une mise à jour
    			int nbColonnes; // nb de colonnes d'un ResultSet
     
    			try{
    //				 connexion à la base
    				Class.forName("com.mysql.jdbc.Driver");
    				connect=DriverManager.getConnection("jdbc:mysql:Prieur","","");
     
    				S=connect.createStatement();
    				sqlText=arg[0];
     
    				try{
    					if(S.execute(sqlText)){
    //					 on a obtenu un ResultSet - on l'exploite
    					RS=S.getResultSet();
    //					 nombre de colonnes
    					nbColonnes=RS.getMetaData().getColumnCount();
    //					 exploitation de la table des résultats
    						while(RS.next()){ // tant qu'il y a une ligne à exploiter
     
    								for(int i=1;i<nbColonnes;i++)
    								System.out.print(RS.getString(i)+",");
    								System.out.println(RS.getString(nbColonnes));
    						}// ligne suivante du ResultSet
    					} else {
    //						 c'était une requête de mise à jour
    						nbLignes=S.getUpdateCount();
    						}//if
    				} catch (Exception e){
     
    					}
     
    	} catch (Exception e){
     
    	}
     
    	try{
    //		 on libère les ressources liées à la base
    		RS.close();
    		S.close();
    		connect.close();
    	} catch (Exception e){}
     
    			}
    	}
    Ici je devrais remplacer le code system.out... par quelque chose qui renvoie le résultat à la méthode appelante ??

    Merci

  2. #2
    Membre régulier Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Deja, dans ta deuxieme clase, tu devrais remplacer ton main par une methode qui renvoie un tableau de String. tu pourrais alors faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ArrayList names = new ArrayList();
    while(RS.next()){ // tant qu'il y a une ligne à exploiter
      String s = new String();
     
      for(int i=1;i<nbColonnes;i++)
         s.append(RS.getString(i)+",");
     
      s.append(RS.getString(nbColonnes));
      names.add(s);
    }// ligne suivante du ResultSet 
     
    return (String[])names.toArray(new String[]{});
    Ou un truc dans le genre si j'ai bien compris. Dans ta methode appelante tu dois alors avoir une JList par exemple dont tu change le modele de donnees en lui donnant le tableau (voir MVC).

    J'espere que ca pourra t'aider

    calypso

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Un detail, fais attention lors de l'utilisation de bases de données avec les Applets, il y a des contraintes assez fortes... Par defaut, tu ne dois pas avoir le droit d'acceder a une DB via une applet. Tu as des possibilites de forcer les droits pour pouvoir le faire sur un intranet, mais pour un outil internet, il me semble que c'est interdit...

  4. #4
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Points : 54
    Points
    54
    Par défaut db
    oulala

    Le site que je vais faire est en local (easy php sera installé sur le pc du client). Une grosse partie du site est en php et il y aura un petit module qui sera une applet. Tu veux dire que je ne pourrai pas envoyer les données entrées par l'utilisateur dans l'applet à la base de données?

    Merci

  5. #5
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Points : 54
    Points
    54
    Par défaut db
    Bonjour,


    J'ai changé le code comme proposé ci dessus. Cependant, il semble qu'il y a un petit problème avec le s.append.

    Voic le code
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
     
    public class basededonnees 
    {
    	static String syntaxe="pg PILOTE URL UID MDP";
    	public static String[] main(String sqlText)
    	{
     
    //			 init paramètres de la connexion
    			Connection connect=null;
     
     
    //			 autres données
    			Statement S=null; // objet d'émission des requêtes
    			ResultSet RS=null; // table résultat d'une requête d'interrogation
    			/*String sqlText;*/ 
    			int nbLignes; // nb de lignes affectées par une mise à jour
    			int nbColonnes; // nb de colonnes d'un ResultSet
     
    			try{
    //				 connexion à la base
    				Class.forName("com.mysql.jdbc.Driver");
    				connect=DriverManager.getConnection("jdbc:mysql:Prieur","","");
     
    				S=connect.createStatement();
    				/*sqlText=arg[0];*/
     
    				try{
    					if(S.execute(sqlText)){
    //					 on a obtenu un ResultSet - on l'exploite
    					RS=S.getResultSet();
    //					 nombre de colonnes
    					nbColonnes=RS.getMetaData().getColumnCount();
    //					 exploitation de la table des résultats
    					ArrayList names = new ArrayList(); 
    						while(RS.next()){ // tant qu'il y a une ligne à exploiter
    							String s = new String();
    							for(int i=1;i<nbColonnes;i++) 
    							     s.append(RS.getString(i)+","); 
     
    							  s.append(RS.getString(nbColonnes)); 
    							  names.add(s); 
     
    						}// ligne suivante du ResultSet
    						return (String[])names.toArray(new String[]{});
    					} else {
    //						 c'était une requête de mise à jour
    						nbLignes=S.getUpdateCount();
    						}//if
    				} catch (Exception e){
     
    					}
     
    	} catch (Exception e){
     
    	}
     
    	try{
    //		 on libère les ressources liées à la base
    		RS.close();
    		S.close();
    		connect.close();
    	} catch (Exception e){}
     
    			}
    	}

    Si qqu1 peut m'aider

    Merci

  6. #6
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String s = new String();
                         for(int i=1;i<nbColonnes;i++)
                              s.append(RS.getString(i)+",");
     
                           s.append(RS.getString(nbColonnes));
                           names.add(s);
     
                      }// ligne suivante du ResultSet
    le jour où String aura une méthode append(), les poules auront des dents.
    apr contre, StringBuffer en a une depuis une éternité ....

    ton code devrait plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    StringBuffer s = new StringBuffer();
                         for(int i=1;i<nbColonnes;i++)
                              s.append(RS.getString(i)+",");
     
                           s.append(RS.getString(nbColonnes));
                           names.add(s);
     
                      }// ligne suivante du ResultSet
    et la prochaine fois, stp, lis la javadoc

  7. #7
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Points : 54
    Points
    54
    Par défaut
    effectivement, cela fonctionne mieux ainsi

    Merci pour l'aide


    Micka

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générer des données en C ou java pour MySQL?
    Par stef06 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/07/2006, 22h41
  2. Connexion java avec mysql
    Par hlimaiem dans le forum Installation
    Réponses: 2
    Dernier message: 15/06/2006, 17h37
  3. [Debutant Java JOGL] problème glVertexPointer()
    Par Stef784ever dans le forum OpenGL
    Réponses: 2
    Dernier message: 21/04/2004, 17h43
  4. [Debutant] jsp et mysql
    Par rose dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/02/2004, 14h38

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