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 :

SOS connexion à une base de données Ms Access 2010


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut SOS connexion à une base de données Ms Access 2010
    Salut.

    Je voudrais réaliser un programme Java qui enregistre des noms de personnes dans une base de données Access.
    Mais je rencontre des erreurs donc j'aimerais avoir de l'aide. Voici le plan de mon programme sous NetBeans :
    Nom : Capture.PNG
Affichages : 899
Taille : 11,4 Ko

    et voici mes 3 classes :
    1) TestAccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class TestAccess {
     
        public static void main(String[] args) throws SQLException {
            String nom = "", prenom = ""; 
            int age = 0;
            Personne pers = new Personne(nom, prenom, age);
            pers.saisie();
             MSAccessBase db = new  MSAccessBase("c:\\Users\\KABRE\\Documents\\TestAccessDB.accdb", "KABRE", "");
            String rq = "insert into personne values ('"+pers.getNom()+"', '"+pers.getPrenom()+"', '"+pers.getAge()+"')";
            db.SQLUpdate(rq);
        }
    }
    2) Personne
    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
     
    public class Personne {
        private String nom;
        private String prenom;
        private int age = 0;
     
        // definition du condtructeur
        public Personne(String n, String p, int a)
        {
            this.nom = n;
            this.prenom = p;
            this.age = a;
        }
     
        // definition des accesseurs
        public String getNom()
        {
            return this.nom;
        }
        public String getPrenom()
        {
            return this.prenom;
        } 
            public int getAge()
        {
            return this.age;
        }
        // une opreration de classe
        public void saisie()
        {
            Scanner sc = new Scanner(System.in);
     
                System.out.println("Saisir Nom___________________________: ");
                String nom1 = sc.nextLine();
                sc.nextLine();
                System.out.println("Saisir Prenom________________________: ");
                String prenom1 = sc.nextLine();
                System.out.println("Saisir Age:__________________________: ");
                int age1 = sc.nextInt();
                System.out.println("--------------- Fin Entrée ---------------------"); 
        }
    }
    3) MSAccessBase
    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
     
    public class MSAccessBase {
     
        // Chemin de la base
        private String path;
     
        // Nom d'utilisateur
        private String user;
     
        // Mot de passe
        private String password;
     
        // Connection vers la base
        private Connection connection;
     
     
        /* Constructeur */
        public MSAccessBase(String path, String user, String password) {
            this.path = path;
            this.user = user;
            this.password = password;
        }
     
     
        /*
        *Connection à la base
        *@return : true si la connexion est réussie, false si échouée
        */
        public boolean connect() {
            try {
                // Chargement du driver ODBC
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     
                // Connexion à la base
                String connectionString = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" + path;
                connection = DriverManager.getConnection(connectionString, user, password);
            }
            catch (ClassNotFoundException e) {
                System.out.println("Problème avec le driver ODBC");
                return false;
            }
            catch (SQLException e) {
                System.out.println("Impossible de se connecter à la base");
                return false;
            }
            return true;
        }
     
     
        /*
        *Déconnexion de la base
        *@return : true si la déconnexion est réussie, false sinon
        */
        public boolean disconnect() {
            try {
                connection.close();
                return true;
            }
            catch (SQLException e) {
                return false;
            }
        }
     
        /*
        *Envoi d'une requête de sélection
        *@param : sql
        *@return : result
        */
        public ResultSet SQLSelect(String sql) throws SQLException {
            Statement statement = null;
            ResultSet result = null;
            try {
                statement = connection.createStatement();
                result = statement.executeQuery(sql);
                return result;
            }
            catch (SQLException e) {
                result.close();
                statement.close();
                return null;
            }
        }
     
        /*
        *Envoi d'une requête de mise à jour (insert, update, delete)
        *@param : sql
        */
        public void SQLUpdate(String sql) throws SQLException {
            Statement statement = null;
            try {
                statement = connection.createStatement();
                statement.executeUpdate(sql);
            }
            catch (SQLException e) {
     
            }
        }  
    }
    et voici l'erreur:
    Exception in thread "main" java.lang.NullPointerException
    at testaccess.MSAccessBase.SQLUpdate(MSAccessBase.java:99)
    at testaccess.TestAccess.main(TestAccess.java:17)
    C:\Users\KABRE\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 13 seconds)
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Tu as instancié un MSAccessBase à cette ligne MSAccessBase db = new MSAccessBase("c:\\Users\\KABRE\\Documents\\TestAccessDB.accdb", "KABRE", "");, mais quand tu appelles la méthode SQLUpdate(String sql), l'attribut connection est encore nul à cette ligne statement = connection.createStatement();, d'où l'exception "java.lang.NullPointerException"

    Ensuite, ça ne sert à rien de propager une exception avec throws SQLException si tu le captures déjà dans la méthode avec catch (SQLException e).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String rq = "insert into personne values ('"+pers.getNom()+"', '"+pers.getPrenom()+"', '"+pers.getAge()+"')";
    Si t'as une valeur avec un guillemet simple, t'auras une erreur, utilise une requête préparée.

    A+.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    ok en tentant de résoudre ça
    l'exception "java.lang.NullPointerException"
    j'ai rajouté
    db.connect(); juste avant db.SQLUpdate(rq).
    Et pour l'utilisation du preparedStatement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     public void SQLUpdate(String sql) throws SQLException {
            //Statement statement = null;
            PreparedStatement pst = null;
            try {
               // statement = connection.createStatement();
                //statement.executeUpdate(sql);
                pst = connection.prepareStatement(sql);
                pst.executeUpdate();
            }
            catch (SQLException e) {
     
            }
        }
    Mais ça renvoie toujours une erreur :
    Problème avec le driver ODBC
    Exception in thread "main" java.lang.NullPointerException
    at testaccess.MSAccessBase.SQLUpdate(MSAccessBase.java:108)
    at testaccess.TestAccess.main(TestAccess.java:18)
    C:\Users\KABRE\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 7 seconds)

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Toogda Voir le message
    Mais ça renvoie toujours une erreur :
    Problème avec le driver ODBC
    Ce que j'ai souligné en jaune et qui s'affiche dans ta console, c'est le message que tu affiches ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch (ClassNotFoundException e) {
                System.out.println("Problème avec le driver ODBC");
                return false;
            }
    Parce que la classe de driver n'est pas trouvée, donc la variable connection n'est pas initialisée et reste à null. Tant que tu n'as pas résolu le premier problème, l'autre arrivera toujours.

    Et la classe sun.jdbc.odbc.JdbcOdbcDriver n'est pas trouvée parce qu'elle n'est plus supportée par Java 8 (ni ODBC over JDBC).

    Il te faut utiliser à la place un autre moyen d'accès, comme la bibliothèque ucanaccess.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Et la classe sun.jdbc.odbc.JdbcOdbcDriver n'est pas trouvée parce qu'elle n'est plus supportée par Java 8 (ni ODBC over JDBC).
    J'ai même pas vu qu'il utilisait java 8 .
    @Toogda, pourquoi utiliser Ms Access?

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    pourquoi utiliser Ms Access?
    j'avoue que j'ai peu de connaissance sur les bases de donné
    Mais pour ma part:
    1- Microsoft Access est bd déjà installé dans la plus part des poste client qui utilise se programme.
    2- pas besoin d'utiliser un serveur ( ou peut être que quelque chose m’échappe ici)
    par exemple, l'utilisation de MySql me nécessite l'installation de wampServer et surtout ce qui me dérange:
    le demande de wamServer a chaque utilisation du logiciel.

    concernant l'utilisation de ucanaccess la connexion est bien établie mais il y'a toujours un problème au niveau de l’exécution de ma requête.
    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
     public void saisie() throws ClassNotFoundException, SQLException
        {
            Scanner sc = new Scanner(System.in);
     
                System.out.println("Saisir Nom___________________________: ");
                String nom1 = sc.nextLine();
                System.out.println("Saisir Prenom________________________: ");
                String prenom1 = sc.nextLine();
                System.out.println("Saisir Age:__________________________: ");
                int age1 = sc.nextInt();
                System.out.println("--------------- Fin Entrée ---------------------");
                setNom(nom1); setPrenom(prenom1); setAge(age1);
     
        Connection con1 = connect();
        String rq = "insert into personne values ('"+this.getNom()+"', '"+this.getPrenom()+"', '"+this.getAge()+"')";
        PreparedStatement pst = con1.prepareStatement(rq);
        int nb = pst.executeUpdate();
        }
        // methode de connextion
        public Connection connect() throws ClassNotFoundException  {
           Connection con = null;
            try {
                Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                con = DriverManager.getConnection("jdbc:ucanaccess://c:\\Users\\KABRE\\Documents\\TestAccessDB.accdb", "", "");
                System.out.println("Connection Etablie! \n");
            }
            catch (SQLException e) {
                System.out.println("Impossible de se connecter à la base");
            }
            return con;
        }
    voici le message d'erreur.

    Connection Etablie!

    Exception in thread "main" net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.2 row column count mismatch
    at net.ucanaccess.jdbc.UcanaccessConnection.prepareStatement(UcanaccessConnection.java:528)
    at testaccess.Personne.saisie(Personne.java:65)
    at testaccess.TestAccess.main(TestAccess.java:14)
    Caused by: java.sql.SQLSyntaxErrorException: row column count mismatch
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessConnection.prepareStatement(UcanaccessConnection.java:525)
    ... 2 more
    Caused by: org.hsqldb.HsqlException: row column count mismatch
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.ParserDQL.XreadContextuallyTypedTable(Unknown Source)
    at org.hsqldb.ParserDML.compileInsertStatement(Unknown Source)
    at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
    at org.hsqldb.Session.compileStatement(Unknown Source)
    at org.hsqldb.StatementManager.compile(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 5 more
    C:\Users\KABRE\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 31 seconds)

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        String rq = "insert into personne values ('"+this.getNom()+"', '"+this.getPrenom()+"', '"+this.getAge()+"')";
        PreparedStatement pst = con1.prepareStatement(rq);
        int nb = pst.executeUpdate();
    Tu vas être déçu mais ce n'est pas comme cela que cela fonctionne ...

    Les emplacements des paramètres de la requête doivent être symbolisés par des "?"
    au lieu d'écrire : ('"+this.getNom()+"', '"+this.getPrenom()+"', '"+this.getAge()+"')
    il faut écrire : (?, ?, ?)

    Ensuite on "injecte" les paramètres (nom, prénom, age) dans l'ordre des "?" et selon le type de données (String, String, int)

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        String rq = "insert into personne values (?, ?, ?)";
        PreparedStatement pst = con1.prepareStatement(rq);
        pst.setString(1,this.getNom());
        pst.setString(2,this.getPrenom());
        pst.setInt(3,this.getAge());
        pst.executeUpdate();
    Pourquoi ce code un peu plus compliqué que le précédent ?
    Parce que setString va automatiquement gérer comme il faut une chaîne de caractère qui contient une apostrophe ou un guillemet
    (alors que '"+this.getNom()+"' va provoquer une erreur s'il en contient)

    Il en est de même avec les autres types de données (par exemple les dates) qui sont difficiles à mettre soi-même au bon format.

    Enfin, un avantage énorme quand ton application prend de l'ampleur : tu peux passer à un autre type de base de données (MySql par exemple) avec très peu de changement de code.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    ok merci mais après correction la même erreur persite.
    je me demende si ce n'est pas des blibiothèque qui manque au niveau des "import ..."
    voici ma classe en entier:
    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
     
     
    package testaccess;
     
    import java.sql.*;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Scanner;
    import com.healthmarketscience.jackcess.*;
    import com.healthmarketscience.jackcess.Database;
    import com.healthmarketscience.jackcess.DatabaseBuilder;
    import net.ucanaccess.jdbc.*;
    import org.hsqldb.jdbc.*;
     
     
    public class Personne {
       ...
        // definition du condtructeur
       ....
        // definition des accesseurs
      ...
        // une opreration de classe
        public void saisie() throws ClassNotFoundException, SQLException
        {
            Scanner sc = new Scanner(System.in);
     
                String nom1 = sc.nextLine();            
                String prenom1 = sc.nextLine();            
                int age1 = sc.nextInt();            
                setNom(nom1); setPrenom(prenom1); setAge(age1);
     
        Connection con1 = connect();
        String rq = "insert into personne values (?, ?, ?)";
        PreparedStatement pst = con1.prepareStatement(rq);
        pst.setString(1, this.getNom());
        pst.setString(2, this.getPrenom());
        pst.setInt(3, this.getAge());
        int nb = pst.executeUpdate();
     
        }
        // methode de connextion
        ...
    }
    Parce que setString va automatiquement gérer comme il faut une chaîne de caractère qui contient une apostrophe ou un guillemet
    (alors que '"+this.getNom()+"' va provoquer une erreur s'il en contient)
    j'ai pas bien compris cette partie, peut être pouriez vous y joindre un exemple.

  9. #9
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Il faudrait la classe avec toutes ses lignes
    et la stacktrace qui indique l'erreur et le numéro de la ligne où elle se produit
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    ok en voici:
    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
     
     
    package testaccess;
     
    import java.sql.*;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Scanner;
    import com.healthmarketscience.jackcess.*;
    import com.healthmarketscience.jackcess.Database;
    import com.healthmarketscience.jackcess.DatabaseBuilder;
    import net.ucanaccess.jdbc.*;
    import org.hsqldb.jdbc.*;
     
     
    public class Personne {
        private String nom;
        private String prenom;
        private int age = 0;
     
        // definition du condtructeur
        public Personne(String n, String p, int a) throws ClassNotFoundException, SQLException
        {
            this.nom = n;
            this.prenom = p;
            this.age = a;
        }
     
        // definition des accesseurs
        public String getNom()
        {
            return this.nom;
        }
        public String getPrenom()
        {
            return this.prenom;
        } 
            public int getAge()
        {
            return this.age;
        }
        // definition des mutateurs
        public void setNom(String nom)
        {
            this.nom = nom;
        }
        public void setPrenom(String prenom)
        {
            this.prenom = prenom;
        }
        public void setAge(int age)
        {
            this.age = age;
        }
        // une opreration de classe
        public void saisie() throws ClassNotFoundException, SQLException
        {
            Scanner sc = new Scanner(System.in);
     
                System.out.println("Saisir Nom___________________________: ");
                String nom1 = sc.nextLine();
                System.out.println("Saisir Prenom________________________: ");
                String prenom1 = sc.nextLine();
                System.out.println("Saisir Age:__________________________: ");
                int age1 = sc.nextInt();
                System.out.println("--------------- Fin Entrée ---------------------");
                setNom(nom1); setPrenom(prenom1); setAge(age1);
     
        Connection con1 = connect();
        //Statement st = con1.createStatement();
        //String rq = "insert into personne values ('"+this.getNom()+"', '"+this.getPrenom()+"', '"+this.getAge()+"')";
        String rq = "insert into personne values (?, ?, ?)";
        PreparedStatement pst = con1.prepareStatement(rq);
        pst.setString(1, this.getNom());
        pst.setString(2, this.getPrenom());
        pst.setInt(3, this.getAge());
        int nb = pst.executeUpdate();
     
        }
        // methode de connextion
        public Connection connect() throws ClassNotFoundException  {
           Connection con = null;
            try {
                Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                con = DriverManager.getConnection("jdbc:ucanaccess://c:\\Users\\KABRE\\Documents\\TestAccessDB.accdb", "", "");
                System.out.println("Connection Etablie! \n");
            }
            catch (SQLException e) {
                System.out.println("Impossible de se connecter à la base");
            }
            return con;
        }
    }
    et voici l'erreur
    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
     
    Connection Etablie! 
     
    Exception in thread "main" net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.2 row column count mismatch
    	at net.ucanaccess.jdbc.UcanaccessConnection.prepareStatement(UcanaccessConnection.java:528)
    	at testaccess.Personne.saisie(Personne.java:72)
    	at testaccess.TestAccess.main(TestAccess.java:14)
    Caused by: java.sql.SQLSyntaxErrorException: row column count mismatch
    	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    	at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
    	at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
    	at net.ucanaccess.jdbc.UcanaccessConnection.prepareStatement(UcanaccessConnection.java:525)
    	... 2 more
    Caused by: org.hsqldb.HsqlException: row column count mismatch
    	at org.hsqldb.error.Error.error(Unknown Source)
    	at org.hsqldb.error.Error.error(Unknown Source)
    	at org.hsqldb.ParserDQL.XreadContextuallyTypedTable(Unknown Source)
    	at org.hsqldb.ParserDML.compileInsertStatement(Unknown Source)
    	at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    	at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
    	at org.hsqldb.Session.compileStatement(Unknown Source)
    	at org.hsqldb.StatementManager.compile(Unknown Source)
    	at org.hsqldb.Session.execute(Unknown Source)
    	... 5 more
    C:\Users\KABRE\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 20 seconds)

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Et dans la table Personne, il n'y a bien que 3 colonnes : nom , prenom, age
    A tout hasard, peux-tu remplacer la ligne de définition de la requête par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String rq = "insert into personne (nom , prenom, age) values (?, ?, ?)";
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    nom, il ya y'a aussi un champ auto-increment avant le champ nom.

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    il n'y plus d'erreur après correction.
    merci.

    Mais en ouvrant Ma base de donnée Microsoft access, je vois les les informations saisie n'ont pas été enregistrer.

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Mais en ouvrant Ma base de donnée Microsoft access, je vois les les informations saisie n'ont pas été enregistrer.
    Je ne suis pas étonné. Tu ne refermes pas la connexion.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        String rq = "insert into personne values (?, ?, ?)";
        PreparedStatement pst = con1.prepareStatement(rq);
        pst.setString(1, this.getNom());
        pst.setString(2, this.getPrenom());
        pst.setInt(3, this.getAge());
        int nb = pst.executeUpdate();
    
        pst.close();
        con1.close();
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    super! ma difficulté est levé grâce aux correction!
    Merci!

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Un petit clic sur résolu alors ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. [AC-2010] Choix d'un format d'une base de données avec Access 2010
    Par ACNTOURAINE dans le forum Access
    Réponses: 5
    Dernier message: 03/12/2014, 13h14
  2. securiser une base de donnée sous access 97
    Par mome67 dans le forum Sécurité
    Réponses: 2
    Dernier message: 10/08/2007, 21h38
  3. Réponses: 1
    Dernier message: 17/05/2006, 15h27
  4. Réponses: 5
    Dernier message: 13/12/2005, 16h04
  5. est ce que d'apres une base de données en access,
    Par loveflower dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 26/10/2004, 16h12

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