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 :

Utiliser un base de données en Java


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Utiliser un base de données en Java
    Bonjour,

    J'aimerais bien lire des données et les mettre dans une application Java

    Voici une classe parmi celles que j'ai faites :
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    import java.awt.BorderLayout;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
     
    public class Dep extends JFrame {
     
        private JTable tableau;
        private String supp = "Supprimer la ligne";
     
        public Dep() {
     
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setTitle("Liste des départements");
            this.setSize(400, 90);
            this.createContent();
        }
     
        private void createContent() {
     
            Object[][] data = { { "Comptabilité", "HP LaserJet 1300" }, { "DAF", "HP LaserJet 1018 Printer" } };
            String title[] = { "Département", "Imprimante" };
            this.tableau = new JTable(new DefaultTableModel(data, title));
            this.tableau.getTableHeader().addMouseListener(new MouseAdapter() {
     
                @Override
                public void mouseReleased(MouseEvent event) {
     
                    if (event.getButton() == MouseEvent.BUTTON3) {
                        if (tableau.columnAtPoint(new Point(event.getX(), event.getY())) != -1) {
                            JMenuItem ajouter = new JMenuItem("Ajouter une colonne");
                            ajouter.addActionListener(new AddListener());
                            JMenuItem erase = new JMenuItem("Effacer cette colonne");
                            erase.addActionListener(new EraseListener(new Point(event.getX(), event.getY())));
                            JPopupMenu menu = new JPopupMenu();
                            menu.add(ajouter);
                            menu.add(erase);
                            menu.show(tableau, event.getX(), event.getY());
                        }
                    }
                }
            });
            this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
        }
     
        class EraseListener implements ActionListener {
     
            private Point      point = null;
            private Object[][] data;
            private Object[]   title;
     
            public EraseListener(Point col) {
     
                this.point = col;
            }
     
            @Override
            public void actionPerformed(ActionEvent event) {
     
                int col = tableau.columnAtPoint(this.point);
                TableColumn column = tableau.getColumn(tableau.getColumnName(col));
                initNewData(column);
                ((DefaultTableModel) tableau.getModel()).setDataVector(this.data, this.title);
            }
     
            private void initNewData(TableColumn column) {
     
                this.data = new Object[tableau.getRowCount()][tableau.getColumnCount() - 1];
                this.title = new Object[tableau.getColumnCount() - 1];
                for (int i = 0; i < tableau.getRowCount(); i++) {
                    for (int j = 0, k = 0; j < tableau.getColumnCount(); j++) {
                        if (!((DefaultTableModel) tableau.getModel()).getColumnName(j).equals(column.getHeaderValue())) {
                            if (i == 0)
                                this.title[k] = ((DefaultTableModel) tableau.getModel()).getColumnName(j);
                            this.data[i][k] = tableau.getValueAt(i, j);
                            k++;
                        }
                    }
                }
            }
        }
     
        class AddListener implements ActionListener {
     
            @Override
            public void actionPerformed(ActionEvent event) {
     
                JOptionPane jop = new JOptionPane(), jop2 = new JOptionPane();
                String nom = JOptionPane.showInputDialog(null, "Saisissez le nom de la nouvelle colonne", "Ajout d'une colonne",
                        JOptionPane.QUESTION_MESSAGE);
                if (nom != null) {
                    if (!nom.trim().equals("")) {
                        ((DefaultTableModel) tableau.getModel()).addColumn(nom);
                    }
                }
            }
        }
    }
    Je souhaiterais modifier "data" avec des données de la base de données.

    J'utilise PostgreSQL.

    Quelqu'un saurait-il m'expliquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah tu prends le premier tutoriel sur JDBC venu et tu te code une classe séparée avec une méthode qui fait la requête adéquate et transforme le contenu du resultset en tableau de tableau.

    Voilà le tutoriel officiel de JDBC: http://download.oracle.com/javase/tu...iew/index.html
    La faq JDBC de developpez.com: http://java.developpez.com/faq/jdbc/

    Et passe directement au PreparedStatement, évite de t'attarder sur les Statement standard.

    Tu n'as plus qu'à te mettre au taf.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Comment transformer le contenu du ResultSet en tableau de tableau ?

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    List<String[]> test;
    while (rs.next()) {
      String[] tab = new String[nombreColonnes];
      tab[0] = rs.getString("NomColonne1");
      tab[1] = rs.getString("NomColonne2");
      tab[2] = rs.getString("NomColonne3");
      tab[3] = rs.getString("NomColonne4");
      tab[4] = rs.getString("NomColonne5");
      test.add(tab);
    }
     
    return test.toArray();

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void action_inscri(java.awt.event.MouseEvent evt) {
            try {
                Class.forName("org.postgresql.Driver");
                Connection conn =  DriverManager.getConnection("jdbc:postgresql://localhost:5432/Ecole", "postgres", "postgres");
                PreparedStatement ps = conn.prepareStatement("INSERT INTO departement(dep) VALUES (?)");
                ps.setObject(1, "toto");
                ps.executeUpdate();
                ps.close();
                conn.close();
            }
            catch (Exception ex){
                System.out.print("Erreur");
            }
        }
    J'ai fait comme ça. Ça n'a pas marché !

    Franchement, je n'ai aucune idée sur la JDBC mise à part la connexion.

    Comment puis-je faire ?

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Ça n'a pas marché comment ?
    Il y a une erreur de compilation ? Une erreur au runtime ?
    Quelle est l'erreur ?

    Cordialement,
    Patrick Kolodziejczyk.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    En fait, en Main, j'ai fait comme ceci :
    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
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    public class Main {
        public static void main(String[] args){
            Accueil Acc = new Accueil();
            try{
            Class.forName("org.postgresql.Driver");
    	String url = "jdbc:postgresql://localhost:5432/Ecole";
    	String user = "postgres";
    	String passwd = "postgres";
    	Connection conn = DriverManager.getConnection(url, user, passwd);
    	Statement state = conn.createStatement();
    	ResultSet result = state.executeQuery("SELECT * FROM departement");
    	ResultSetMetaData resultMeta = result.getMetaData();
    	for(int i = 1; i <=  resultMeta.getColumnCount(); i++)
                System.out.print("\t" + resultMeta.getColumnName(i).toUpperCase() + "\t |");
                while(result.next()){			
                    for(int i = 1; i <=  resultMeta.getColumnCount(); i++)
    		System.out.print("\t" + result.getObject(i).toString() + "\t |");
                }
                result.close();
                state.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        }
    }
    La connexion est 5/5, l'affichage aussi.
    Pour la classe où j'ai mis le JTable, j'ai pas pu ni récupérer ni exporter des données. Je savais même pas si c'est le code est erroné ou bien il y'a d'autres erreurs.

    Voici la classe où j'ai mis le tableau :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    import java.awt.BorderLayout;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    public class Dep extends JFrame {
        private JTable tableau;
        private String supp = "Supprimer la ligne";
        public Dep(){
            this.setLocationRelativeTo(null);
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.setTitle("Liste des départements");
    	this.setSize(400, 90);
    	this.createContent();
        }
        private void createContent(){
            Object[][] data = {{"Comptabilité", "HP LaserJet 1300"}, {"DAF", "HP LaserJet 1018 Printer"}};
            String  title[] = {"Département", "Imprimante"};
                this.tableau = new JTable(new DefaultTableModel(data, title));
                this.tableau.getTableHeader().addMouseListener(new MouseAdapter(){
                @Override
                    public void mouseReleased(MouseEvent event){
                        if(event.getButton() == MouseEvent.BUTTON3){
                            if(tableau.columnAtPoint(new Point(event.getX(), event.getY())) != -1){
                                JMenuItem ajouter = new JMenuItem("Ajouter une colonne");
                                ajouter.addActionListener(new AddListener());
                                JMenuItem erase = new JMenuItem("Effacer cette colonne");
                                erase.addActionListener(new EraseListener(new Point(event.getX(), event.getY())));
                                JPopupMenu menu = new JPopupMenu();
                                menu.add(ajouter);
                                menu.add(erase);
                                menu.show(tableau, event.getX(), event.getY());
                            }
                        }
                }
                });
                this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
        }
        class EraseListener implements ActionListener{
            private Point point = null;
    	private Object[][] data;
    	private Object[] title;
    	public EraseListener(Point col){
    	this.point = col;
            }
            @Override
            public void actionPerformed(ActionEvent event) {
                int col = tableau.columnAtPoint(this.point);
                TableColumn column = tableau.getColumn(tableau.getColumnName(col));
                initNewData(column);
                ((DefaultTableModel)tableau.getModel()).setDataVector(this.data, this.title);
            }
            private void initNewData(TableColumn column){
                this.data = new Object[tableau.getRowCount()][tableau.getColumnCount()-1];
                this.title = new Object[tableau.getColumnCount()-1];
                for(int i = 0; i < tableau.getRowCount(); i++){
                    for(int j = 0, k = 0; j < tableau.getColumnCount(); j++){
                        if(!((DefaultTableModel)tableau.getModel()).getColumnName(j).equals(column.getHeaderValue())){
                            if(i == 0)this.title[k] = ((DefaultTableModel)tableau.getModel()).getColumnName(j);
                            this.data[i][k] = tableau.getValueAt(i, j);
                            k++;
                        }
                    }
                }
            }
        }
        class AddListener implements ActionListener{
            @Override
            public void actionPerformed(ActionEvent event) {
                JOptionPane jop = new JOptionPane(), jop2 = new JOptionPane();
                String nom = JOptionPane.showInputDialog(null, "Saisissez le nom de la nouvelle colonne", "Ajout d'une colonne", JOptionPane.QUESTION_MESSAGE);
                if(nom != null){
                    if(!nom.trim().equals("")){
                        ((DefaultTableModel)tableau.getModel()).addColumn(nom);
                    }
                }
            }
        }
        private void action_inscri(java.awt.event.MouseEvent evt) {
            try {
                Class.forName("org.postgresql.Driver");
                Connection conn =  DriverManager.getConnection("jdbc:postgresql://localhost:5432/Ecole", "postgres", "postgres");
                PreparedStatement ps = conn.prepareStatement("INSERT INTO departement(dep) VALUES (?)");
                ps.setObject(1, "toto");
                ps.executeUpdate();
                ps.close();
                conn.close();
            }
            catch (Exception ex){
                System.out.print("Erreur");
            }
        }
    }

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Pour insérer des données dans une bdd, il faut ouvrir ton statement en mode "capable d'écrire" comme le dit la doc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Statement stmt = con.createStatement(
                                          ResultSet.TYPE_SCROLL_INSENSITIVE,
                                          ResultSet.CONCUR_UPDATABLE);
    à présent avec les resultSet que tu obtiendras, tu pourras écrire dans la bdd avec les méthode updateString(str) ou les autres update.
    Il faut ensuite appeler la méthode updateRow() pour que la ligne soit écrite dans la bdd

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

Discussions similaires

  1. meilleure base de données avec java
    Par mial dans le forum JDBC
    Réponses: 11
    Dernier message: 10/11/2010, 11h49
  2. Fichier manquant en utilisant une base de données DBF
    Par Stephane Michaud dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/07/2005, 11h22
  3. [ODBC] Utiliser une base de données Access sans les MFC
    Par Higestromm dans le forum Bases de données
    Réponses: 6
    Dernier message: 15/03/2005, 21h37
  4. utilisation de base de donnée
    Par mohfa1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/03/2005, 17h40

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