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 :

L'application plante avec JDBC


Sujet :

JDBC Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut L'application plante avec JDBC
    Bonjour,
    je développe actuellement un petit logiciel en java nécessitant des accès à une base de données.
    Donc je crée ma Desktop Application (j'utilise Netbeans 6.7), je crée ma classe métier, ma classe DB, une classe créant une connection et donc j'ai voulu faire un test pour voir si ces derniers marchaient.
    Lorsque j'appelle donc ces classes et méthodes, l'application freeze et je dois la tuer via le gestionnaire de tâches, il y alors cela d'affiché en output:
    Java Result: 1073807364

    Jme suis donc dit que j'avais fait une erreur de code quelque part et j'ai testé dans une application console pour débugger en recopiant les fichiers et le driver : tout marche niquel. En JEE pareil.

    Je suis donc passé par le debugger : le programme console se debug normalement en passant de ligne à ligne en revanche le debug du programme gui plante à cette ligne (j'arrive à getConnection() et ensuite toutes les options du debugger deviennent grisées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection connect = ConnectionDB.getConnection();
    Cette ligne fait appel à cette classe :

    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 class ConnectionDB {
     
        //URL pour la base
        private String url = "jdbc:postgresql://****";
        private String driver = "org.postgresql.Driver";
        private String user = "****";
        private String passwd = "";
        private static Connection connect;
     
        //Constructeur
        private ConnectionDB() {
            try {
                Class.forName(driver);
                connect = DriverManager.getConnection(url, user, passwd);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
     
        /**
         * Méthode chargée de récup une connection 
         * @return Connection
         */
        public static Connection getConnection() {
            new ConnectionDB();
            return connect;
        }
    }
    Le problème vient pas du code en lui même (erreur de frappe ou quoi) vu que j'ai fait du copier/coller pour tous les éléments donc je suis vraiment perdu là.
    Quelqu'un aurait une idée?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Si tu fait des "step into" quand tu arrive à la dite ligne, ca foire à quel endroit de getConnection ou du constructeur? Ce ne serait pas le serveur postgres qui ne répond pas, et fait attendre ton programme indéfiniment sur le getConnection(url,user,pass) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Ca va dans toutes les classes java (DriverManager, Properties, HashTable, ...) et le Step Into s'arrête dans System.java sur cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /**
         * Gets the system security interface.
         *
         * @return  if a security manager has already been established for the
         *          current application, then that security manager is returned;
         *          otherwise, <code>null</code> is returned.
         * @see     #setSecurityManager
         */
        public static SecurityManager getSecurityManager() {
    	return security;
        }
    Et le serveur postgres répond bien vu que jpeux me connecter via pgadmin ou par mon application JEE et console.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    largué là
    Tenté le redémarrage de netbeans?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Déjà tenté et jviens de le refaire ça change rien au problème
    Et le programme en console marche toujours niquel
    Je repars à l'attaque du problème demain, là je suis à 2 doigts de craquer

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Bon de retour sur le problème et tjrs aucune solution en vue
    Des que j'essaie d'atteindre la base de données, l'app freeze totalement.
    Quelqu'un aurait un exemple très basique d'appli utilisant jdbc? (genre un bouton > un select ou quoi)

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ton code est simple et devrait fonctionner. D'ailleurs il fonctionne en ligen de commande d'après ce que tu dit, j'aurais donc tendance à blamer le debugger de ton ide.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Mais ça me parait fou ! Y a bien déjà des gens ayant fait des applications avec gui utilisant jdbc et une base postgres avec Netbeans !
    Jvais le faire en console si ça continue...

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par Balthek Voir le message
    Mais ça me parait fou ! Y a bien déjà des gens ayant fait des applications avec gui utilisant jdbc et une base postgres avec Netbeans !
    Jvais le faire en console si ça continue...
    ouai ben t'as peut etre un problème avec ton netbean, ce serait pas le premier bug à declenchement obscur dans un ide Ou un problème de config de ton projet netbean, mais je vois pas quoi.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Bon jtesterai sur mon netbeans chez moi en rentrant on sait jamais...
    Merci pour ton aide en tout cas, je tiens au courant

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Bon ça marche toujours pas donc je vais mettre mon code ici au cas où j'aurais une boulette (genre façon différente d'utiliser JDBC avec GUI que pour console/JEE...)

    Classe de connexion
    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
     
    public class ConnectionDB {
     
        //URL pour la base
        private String url = "jdbc:postgresql://url";
        private String driver = "org.postgresql.Driver";
        private String user = "";
        private String passwd = "";
        private static Connection connect;
     
        private ConnectionDB() {
            try {
                Class.forName(driver);
                connect = DriverManager.getConnection(url, user, passwd);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
     
        /**
         * Méthode chargée de récup une connection 
         * @return Connection
         */
        public static Connection getConnection() {
            new ConnectionDB();
            return connect;
        }
    (Je ne mets pas le code de la classe Achat, c'est uniquement des getters/setters/constructeurs)

    Classe contenant les requêtes
    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
     
    public class AchatDB {
     
     
        /**
         * Méthode qui vérifie si l'id existe dans la table contact et sinon insère une anomalie
         * @param obj
         * @return boolean
         */
        public boolean findContact(Achat obj) {
            boolean found = false;
            Connection connect = ConnectionDB.getConnection();
     
            try {            
                Statement stt = null;
                stt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                ResultSet result = stt.executeQuery("SELECT con_num_cli FROM t_contact WHERE con_num_cli = '" + obj.getNum_client() + "'");
     
                result.last();
                if (result.getRow() >= 1) {
                    result.close();
                    found = true; //Renvoie true si la requête renvoie au moins 1 ligne (donc présent dans la db)
                } else {
                    PreparedStatement pstmt = connect.prepareStatement("INSERT INTO t_anomalie (ano_num_cli, ano_date_achat, ano_num_serie, ano_code_produit, ano_date_ano, ano_code_revendeur, ano_code_ano) VALUES (? , ?::Date , ? , ? , ?::Date , ? , ?)");
                    pstmt.setString(1, obj.getNum_client());
                    pstmt.setString(2, obj.getDate_achat());
                    pstmt.setString(3, obj.getNum_serie());
                    pstmt.setString(4, obj.getCode_produit());
                    pstmt.setString(5, new Date().toString());
                    pstmt.setString(6, obj.getCode_revendeur());
                    pstmt.setString(7, "03");
                    int result2 = pstmt.executeUpdate();
     
                    if (result2 == 1) //Si l'insert est ok
                    {
                        found = false;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            connect = null;
            return found;
     
        }
    }
    Appel de la fonction depuis un clic sur un bouton dans l'interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Achat test = new Achat("1000015037", "1000015037", "22222", "01/01/2008", "33333");
    AchatDB db = new AchatDB();
    boolean resultat = db.findContact(test); //Plante à cette ligne
    System.out.println(resultat);
    Le driver postgres est bien sûr présent.
    J'ai testé ce code en console/JEE et il marche niquel...
    J'espère avoir fait une erreur monstrueuse au moins la correction sera rapide

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    pas d'erreur dans to code. T'as essayé de réinstaller ton IDE?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    J'ai réinstallé ça a rien changé
    Y a d'autres moyens simples que JDBC pour accéder à ma db? (au cas où j'arrive pas à résoudre ce problème)

  14. #14
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Bonjour,

    Dans cette fonction

    /**
    * Méthode chargée de récup une connection
    * @return Connection
    */
    public static Connection getConnection() {
    new ConnectionDB();
    return connect;
    }
    Tu crées une nouvelle connection chaque fois
    Il serait bien de faire un test avant d'appeler new ConnectionDB()


    /**
    * Méthode chargée de récup une connection
    * @return Connection
    */
    public static Connection getConnection() {
    if (connect == null)
    {
    new ConnectionDB();
    }
    return connect;
    }
    Dans AchatDB, il serait bien de:
    - Tester si connect != null (problème SQLException ....)
    - Faire un close connection au lieu de faire

    connect = null;
    - Faire un close de Statement, ResultSet, PreparedStatement, Connection si tu les utilises

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Merci pour ces éléments supplémentaires.

    Personne d'autre aurait-une idée pour résoudre ce bug?

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    utilise eclipse?

    D'après ce que tu dit, ton bug ne se produit que quand tu passe en mode debug dans ton IDE, donc j'aurais tendance à dire qu'un plugin ou une option de configuration de ton IDE coince, parce que ton code est on ne peux plus basique, et il y a aps de raison que ton ide givre dans le security manager.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Je connais pas du tout Eclipse.
    Y a un plugin pour faire du drag'n'drop de contrôles comme sur Netbeans ou VS?

    EDIT : Après test sous Eclipse le pb demeure, le problème vient donc bien du code et pas de l'ide !

  18. #18
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Bonjour,

    Avec IntelliJ Idea je n'ai aucun problème

  19. #19
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Quand tu lance ton code depuis la console et que ça réussi, tu le fais comment? Est-ce que la jvm est la même que celle utilisée par tes IDE? Si tu utilise une autre base de données (exemple hsqldb) t'as aussi le problème?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Quand tu lance ton code depuis la console et que ça réussi, tu le fais comment? Est-ce que la jvm est la même que celle utilisée par tes IDE? Si tu utilise une autre base de données (exemple hsqldb) t'as aussi le problème?
    Pour depuis la console : je copie les classes dont j'ai mis le code et les lignes appelantes + le driver et je lance : marche niquel directement

    Pour la JRM ouais yen a une seule d'installé, ils utilisent la même (jdk1.6.0_14).

    Je vais test avec une autre db je reviens éditer ce post pour le résultat

    EDIT : j'ai testé avec une base Derby et là aucun problème pour l'utiliser, aucun bug

Discussions similaires

  1. Réponses: 15
    Dernier message: 28/05/2014, 14h06
  2. Mon application plante avec TMainMenu
    Par SOPSOU dans le forum Composants VCL
    Réponses: 1
    Dernier message: 07/09/2007, 14h54
  3. Réponses: 2
    Dernier message: 26/05/2003, 19h42
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  5. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    Réponses: 4
    Dernier message: 15/11/2002, 22h45

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