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

NetBeans Java Discussion :

Connection et requete sql avec java


Sujet :

NetBeans Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Connection et requete sql avec java
    Bonjour

    Je suis entrain de créer une application java a l'aide de netbeans. c'est une interface graphique pour utiliser une base de données firebird. J'ai kk connaisance en java et en base de do ms je suis pas du tout un expert comme vous pourrez le voir.

    -J'ai créer ma base de données sur firebird
    -j'ai créer une interface sur netbeans
    -ensuite j'ai reussi a me connecter a ma base de données depuis netbeans ( en installant les driver et tout ça)


    en ce moment ce que j'essaye de faire c'est d'enregistrer une requete sur un Jbutton et puis afficher le resultat dans un Jtextefield.

    voici mon 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
     
     
    package my.IntDatUI;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
     
    public class IntDatUI extends javax.swing.JFrame {
     
        /** Creates new form IntDatUI */
        public IntDatUI() {
            initComponents();
        }  
    String url = "jdbc:firebirdsql:localhost/3050:c:/Program Files/IBEasy+/Databases/BDMAT2.gdb";
    String login = "SYSBDA";
    String password = "test";
     
    private void OKActionPerformed(java.awt.event.ActionEvent evt) {                                   
        Connect();
        PreparedStatement prep1 = Connection.prepareStatement("SELECT Name FROM PRODUIT Whhere Name.reference=012547"); //ERROR
        }   
     
     public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new IntDatUI().setVisible(true);
                }
            });
        }
     
        private void Connect() {
    try{
      Connection connection = DriverManager.getConnection(url,login,password);
      //interaction avec la base
    }
     
    }
    Mais apparement je ne peut pas executer la methode preparedstatement dans la methode OKaction performed.
    j'ai visiter ces site web et puis quelques tuto de java mais je ne trouve pas un code exemple qui regroupe tout.

    http://www.dil.univ-mrs.fr/~massat/ens/java/jdbc.html
    http://java.developpez.com/faq/jdbc/...nDriverManager
    http://www.netbeans.org/kb/55/gui-database.html

    En faite j'aurai juste besoin que quelqu'un me donne un code "type" pour que l'interface se connecte a la base de do et puis en fesant un click sur le boutton "OK" on obtienne le resultat de la requete sur un JtextField.

    kk1 peut m'aider SVP ??

  2. #2
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 80
    Points : 56
    Points
    56
    Par défaut
    salut,
    que veux tu au juste afficher dans le jtextfield. Parceque ta requete "select * from TABLE" est un peu trop longue. Le Jtextfield prendre seulement un String. Il faut que le résultat de ton query soit une intersection d'une colonne et d'une ligne de ta base données pourque tu puisses l'affecter au JtextField.
    fazo

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Salut

    mon interface finale devrait me permettre d'afficher le nom d'un produit on connaissant sa référence par exemple. Ce qui équivaut je crois a :

    (SELECT Name From PRODUIT Where Name.Reference = 00000125 )

    Je crois que je pourrai me démerder pour les requêtes SQL ms en ce moment je n'arrive pas a faire une requete a partir de mon interface. En gros j'essaye de faire le truc le plus simple déjà.

    Ensuite je voudrais par exemple afficher la colonne d'une table dans un Jcomobox et pouvoir filtrer mes données facilement comme avec un filtre automatique Excel.

  4. #4
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 80
    Points : 56
    Points
    56
    Par défaut
    pour afficher le resultat dans le jtextfield:
    avec cette connexion que tu as deja etablie dans ton code d'avant:
    Connection connection = DriverManager.getConnection(url,login,password);
    tu ajoutes ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                Statement st = connection.createStatement();
                ResultSet rs = st.executeQuery("SELECT Name From PRODUIT Where Name.Reference = 00000125");
    //si l'index de la colonne name est 2 par exemple
                MyJtextField.setText(rs.getString(2)) ;
    //si tu n'as rien d'autre a faire
                rs.close();
                st.close();
                connection.close();

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Quand j'insère ce code j'obtient les erreurs suivantes :


    Incompatible Types
    found : java.sql.Statement
    required: java.beans.Statement

    pour la déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Statement st = connection.createStatement();
    et ensuite il me dit :

    Cannot find Symbol
    Symbol : method executeQuery(java.lang.string)
    Symbol : method Close()


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ResultSet rs = st.executeQuery("SELECT Name From PRODUIT Where Name.Reference = 00000125");
    st.close();
    J'ai importé les classe suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import java.beans.Statement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    mais je ne comprend pas l'erreur

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut
    Devrait être java.sql.Statement. Non ?
    Vincent

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    si je le rajoute "import java.sql.Statement" il me dit qu'il existe deja :

    import java.beans.Statement is alrealdy defined in single Type-import

    et ensuite qd je fait "fixe imports" netbenas surprime "import java.sql.Statement"

    Sinon je viens aussi d'essayer un nouveaux truc suivant un tuto de netbeans :

    http://www.netbeans.org/kb/55/gui-database.html

    j'ai utiliser la classe suivante :

    * JDBCRowSet.java.

    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
    package my.IntDatUI;
     
    import java.sql.*;
    import com.sun.rowset.JdbcRowSetImpl;
     
    /**
     * Simple wrapper around <code>JdbcRowSetImpl</code> that allows
     * to use the <code>RowSet</code> as a JavaBean.
     *
     * @author Jan Stola
     */
    public class JDBCRowSet extends JdbcRowSetImpl {
        /** Class name of the driver used to load this row set. */
        private String driver;
     
        /**
         * Setter for <code>username</code> property.
         *
         * @param userName user name used by the rowSet to connect to the database.
         */
        public void setUsername(String userName) {
            super.setUsername(userName);
            executeIfPossible();
        }
     
        /**
         * Setter for <code>password</code> property.
         *
         * @param password password used by the rowSet to connect to the database.
         */
        public void setPassword(String password) {
            super.setPassword(password);
            executeIfPossible();
        }
     
        /**
         * Setter for <code>command</code> property.
         *
         * @param command SQL command used by this rowSet to populate its data.
         */
        public void setCommand(String command) throws SQLException {
            super.setCommand(command);
            executeIfPossible();
        }
     
        /**
         * Setter for <code>url</code> property.
         *
         * @param url database URL.
         */
        public void setUrl(String url) throws SQLException {
            super.setUrl(url);
            executeIfPossible();
        }
     
        /**
         * Getter for <code>driver</code> property.
         * @return class name of the driver used to load this row set.
         */
        public String getDriver() {
            return driver;
        }
     
        /**
         * Setter for <code>driver</code> property.
         *
         * @return class name of the driver used to load this row set.
         */
        public void setDriver(String driver) {
            this.driver = driver;
        }
     
        public int setTypeMap() {
            return 0;
        }
     
        // Helper method called when some important property is changed.
        // Checks whether all important properties are set and if so
        // then loads/reloads the row set.
        private void executeIfPossible() {
            try {
                if ((getUsername() != null)
                && (getPassword() != null)
                && (getCommand() != null)
                && (getUrl() != null)
                && (getDriver() != null)) {
                    Class driverClass = Class.forName(driver);
                    // DriverManager invoked through RowSet uses context classloader
                    // to find the correct driver => making sure it is set correctly.
                    Thread currentThread = Thread.currentThread();
                    ClassLoader classLoader = currentThread.getContextClassLoader();
                    currentThread.setContextClassLoader(driverClass.getClassLoader());
                    execute();
                    // Restore the original context classloader in case it is needed somewhere else.
                    currentThread.setContextClassLoader(classLoader);
                }
            } catch (SQLException sqlex) {
                sqlex.printStackTrace();
            } catch (ClassNotFoundException cnfex) {
                cnfex.printStackTrace();
            }
        }
     
        // Returns connection object used by this row set.
        protected Connection getConnection() {
            return super.getConnection();
        }
     
    }
    et j'ai modifier une autre classe qu'ils fournissent dans le tuto "contactsModel"

    en gros j'ai mis tout ce qui été pas nécessaires en commentaire et j'ai rajouté la méthode suivante

    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
     
    public void SelectTest() {
             Statement stmt = null;
        try {
            Connection con = rowSet.getConnection();
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT Name From PRODUIT Where Name.Reference = 00000125");
     
        }
        catch (SQLException sqlex) {
            sqlex.printStackTrace();
        } 
             finally {
                        if (stmt != null) {
                        try {
                            stmt.close();
                        } catch (SQLException sqlex) {
                        sqlex.printStackTrace();
                         }
                }
        }
    }
    tout marche bien jusqu'au la, mais quand j'essaye d'inserer le code suivant dans la actionPerformed de mon boutton ok :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void OKActionPerformed(java.awt.event.ActionEvent evt) {                                   
        ContactsModel.SelectTest();
        NomFa.setText(((ContactsModel.SelectTest()).rs).getString(2));
        }
    netbeans me dit que ce n'ai pas possible de referencer une methode non-static à partir d'un contexte static.

    la méthode étant : SelectTest()

    J'avais le même problème quand s'essayait de faire une requete directement dans le code source de mon interface.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Dans le code généré par Netbeans pour mon interface InDatUI on trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private my.IntDatUI.ContactsModel contactsModel;
    Tandis que dans le fichier originale c'était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private examples.ContactsModel contactsModel;
    J'ai essayé d'insérer une méthode du code originale de ContactsModel dans ma nouvel classe (ContactsModel) modifié. Ensuite j'appelle cette méthode avec un Jbutton mais j'ai le même erreur de "non-static..."
    Ce problème n'existais pas dans le code originale.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    J'ai découvert l'erreur, il fallait que j'écrive :

    contactsModel.SelectTest(); (sans la majuscule à la première lettre)

    au lieu de :

    ContactsModel.SelectTest();

    Car ContactsModel c le nom de la classe....mais je saurais pas très bien l'expliquer.

    Ah ben ouaip c dur pour moi

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 05/05/2011, 09h41
  2. Réponses: 6
    Dernier message: 27/07/2009, 05h14
  3. REQUETE SQL AVEC HAVING
    Par juju_77 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 05/08/2005, 09h49
  4. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18
  5. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40

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