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 :

JDBC Oracle Connection


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Par défaut JDBC Oracle Connection
    Bonjour
    Excuser moi de vous déranger mais j'aimerais savoir quelque chose.

    En effet je voudrais me connecter à un base de données Oracle sous JDBC et sous eclipse.

    1-Une classe qui récupère dans un fichier de configuration les mots de passe, login , instance et URL de connection. ------> Pas de problème

    2-Une seconde classe qui utilise les informations précédentes pour se connecter à la base en question.--------> pas de problème

    3-(La plus compliquée) Pour éviter de réécrire les informations de connecter tous le temps, j'aimerais créer une troisième classe qui fera appel à la seconde classe pour effectuer des requêtes d'insertion et autres dans la base, mais j'arrive pas.

    merci de m'aider à avancer

  2. #2
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Ben ce serait pas mal de nous dire où tu en est déjà (par exemple le code de ta 3e classe), et ce qui ne marche pas...
    Si tu arrives à envoyer des requêtes à ta base et à traiter le retour tu as fait le plus gros, le reste ce n'est que de l'organisation...

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est typiquement le principe d'un DAO.
    Je ne vois pas trop où est ton problème mais voici un petit exemple

    La classe utilitaire pour la connection
    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
     
    package com.test;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    public class DataBaseUtils
    {
        public static Connection getConnection()
        {
            Connection connection = null;
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "ob");
                connection.setAutoCommit(false);
            }
            catch (Exception e)
            {
            }
            return connection;
        }
    }
    La classe DAO
    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
     
    package com.test;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
     
    public class PersonDAO
    {
        private static PersonDAO personDAO;
     
        private PersonDAO()    {}
     
        public static PersonDAO getInstance()
        {
            if (personDAO == null)
            {
                personDAO = new PersonDAO();
            }
            return personDAO;
        }
     
        public Integer addPerson(String firstName, String lastName, String address, String zip, String city) throws Exception
        {
            Connection connection = null;
            Integer uid = 0;
            try
            {
                connection = DataBaseUtils.getConnection();
     
                PreparedStatement pstmt = connection.prepareStatement("insert into T_PERSON(FIRST_NAME, LAST_NAME, ADDRESS, ZIP, CITY) values(?, ?, ?, ?, ?)");
                pstmt.setString(1, firstName);
                pstmt.setString(2, lastName);
                pstmt.setString(3, address);
                pstmt.setString(4, zip);
                pstmt.setString(5, city);
                pstmt.executeUpdate();
     
                connection.commit(); // <- si autocommit = false
     
                ResultSet rs = pstmt.getGeneratedKeys();
                if(rs.next()) uid = rs.getInt(1);
            }
            catch (Exception e)
            {
                // logger
                throw e;
            }
            finally
            {
                if (connection != null) connection.close();
            }
            return uid;
        }
     
        public void removePerson(Integer uid) throws Exception
        {
            Connection connection = null;
            try
            {
                connection = DataBaseUtils.getConnection();
     
                PreparedStatement pstmt = connection.prepareStatement("delete from T_PERSON where UID = ?");
                pstmt.setInt(1, uid);
                pstmt.executeUpdate();
     
                connection.commit(); // <- si autocommit = false
            }
            catch (Exception e)
            {
                // logger
                throw e;
            }
            finally
            {
                if (connection != null) connection.close();
            }
        }
    }
    et le programme de test
    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
     
    package com.test;
     
    public class Main
    {
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            try
            {
                String firstName = "FIRST NAME";
                String lastName = "LAST NAME";
                String address = "ADDRESS";
                String zip = "ZIP";
                String city = "VILLE";
                Integer uid = PersonDAO.getInstance().addPerson(firstName, lastName, address, zip, city);
                System.out.println("Personne créée, uid=" + uid);
            }
            catch (Exception e)
            {
                System.out.println("Erreur lors de la création de la personne");
            }
        }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Par défaut Re
    Citation Envoyé par OButterlin Voir le message
    C'est typiquement le principe d'un DAO.
    Je ne vois pas trop où est ton problème mais voici un petit exemple

    La classe utilitaire pour la connection
    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
     
    package com.test;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    public class DataBaseUtils
    {
        public static Connection getConnection()
        {
            Connection connection = null;
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "ob");
                connection.setAutoCommit(false);
            }
            catch (Exception e)
            {
            }
            return connection;
        }
    }
    La classe DAO
    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
     
    package com.test;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
     
    public class PersonDAO
    {
        private static PersonDAO personDAO;
     
        private PersonDAO()    {}
     
        public static PersonDAO getInstance()
        {
            if (personDAO == null)
            {
                personDAO = new PersonDAO();
            }
            return personDAO;
        }
     
        public Integer addPerson(String firstName, String lastName, String address, String zip, String city) throws Exception
        {
            Connection connection = null;
            Integer uid = 0;
            try
            {
                connection = DataBaseUtils.getConnection();
     
                PreparedStatement pstmt = connection.prepareStatement("insert into T_PERSON(FIRST_NAME, LAST_NAME, ADDRESS, ZIP, CITY) values(?, ?, ?, ?, ?)");
                pstmt.setString(1, firstName);
                pstmt.setString(2, lastName);
                pstmt.setString(3, address);
                pstmt.setString(4, zip);
                pstmt.setString(5, city);
                pstmt.executeUpdate();
     
                connection.commit(); // <- si autocommit = false
     
                ResultSet rs = pstmt.getGeneratedKeys();
                if(rs.next()) uid = rs.getInt(1);
            }
            catch (Exception e)
            {
                // logger
                throw e;
            }
            finally
            {
                if (connection != null) connection.close();
            }
            return uid;
        }
     
        public void removePerson(Integer uid) throws Exception
        {
            Connection connection = null;
            try
            {
                connection = DataBaseUtils.getConnection();
     
                PreparedStatement pstmt = connection.prepareStatement("delete from T_PERSON where UID = ?");
                pstmt.setInt(1, uid);
                pstmt.executeUpdate();
     
                connection.commit(); // <- si autocommit = false
            }
            catch (Exception e)
            {
                // logger
                throw e;
            }
            finally
            {
                if (connection != null) connection.close();
            }
        }
    }
    et le programme de test
    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
     
    package com.test;
     
    public class Main
    {
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            try
            {
                String firstName = "FIRST NAME";
                String lastName = "LAST NAME";
                String address = "ADDRESS";
                String zip = "ZIP";
                String city = "VILLE";
                Integer uid = PersonDAO.getInstance().addPerson(firstName, lastName, address, zip, city);
                System.out.println("Personne créée, uid=" + uid);
            }
            catch (Exception e)
            {
                System.out.println("Erreur lors de la création de la personne");
            }
        }
    }
    Bonsoir
    j'ai essayer ton code pour voir si tout fonctionnait, les données sont effectivement enregistrées dans la table mais pas moyen d'avoir la valeur de uid.
    Après avoir insérer les données dans la table le message Erreur lors de la création de la personne est affiché.

    Apres avoir cheche sur la toile je voudrias te demander si t'as pas oublier un
    Statement.RETURN_GENERATED_KEYS dans PreparedStatement pstmt?
    merci pour ton aide

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Non, mais j'ai testé ce code sur une base MySQL.
    Je pense que le problème vient de la définition de la table T_PERSON, en particulier le champ UID qui est auto-increment.
    Le code de création est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE  `test`.`t_person` (
      `UID` int(10) unsigned NOT NULL auto_increment,
      `FIRST_NAME` varchar(60) default NULL,
      `LAST_NAME` varchar(60) default NULL,
      `ADDRESS` varchar(128) default NULL,
      `ZIP` varchar(45) default NULL,
      `CITY` varchar(60) default NULL,
      PRIMARY KEY  (`UID`)
    )
    Pour faire l'équivalent avec Oracle (d'après ce que j'ai lu), il faut passer par une SEQUENCE et créer un trigger sur la table...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pétard, ça ne s'arrête pas là !!!
    Il va falloir modifier le code comme ceci, bonjour la portabilité
    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
        public Integer addPerson(String firstName, String lastName, String address, String zip, String city) throws Exception
        {
            Connection connection = null;
            Integer uid = 0;
            try
            {
                connection = DataBaseUtils.getConnection();
                
                PreparedStatement pstmt = connection.prepareStatement("insert into T_PERSON(FIRST_NAME, LAST_NAME, ADDRESS, ZIP, CITY) values(?, ?, ?, ?, ?)", new String[]{"ID"});
                pstmt.setString(1, firstName);
                pstmt.setString(2, lastName);
                pstmt.setString(3, address);
                pstmt.setString(4, zip);
                pstmt.setString(5, city);
                pstmt.executeUpdate();
                
                connection.commit(); // <- si autocommit = false
                
                ResultSet rs = pstmt.getGeneratedKeys();
                if(rs.next()) uid = rs.getInt(1);
            }
            catch (Exception e)
            {
                // logger
                throw e;
            }
            finally
            {
                if (connection != null) connection.close();
            }
            return uid;
        }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. connection jdbc - oracle
    Par Fennec. dans le forum JDBC
    Réponses: 5
    Dernier message: 11/09/2008, 12h42
  2. Connection JDBC- Oracle
    Par punisher999 dans le forum JDBC
    Réponses: 3
    Dernier message: 10/09/2008, 07h44
  3. Réponses: 3
    Dernier message: 14/11/2005, 16h18
  4. [JDBC] [Oracle] Erreur : End of TNS data channel
    Par loicmillion dans le forum JDBC
    Réponses: 2
    Dernier message: 01/02/2005, 14h27
  5. Réponses: 5
    Dernier message: 21/04/2004, 11h43

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