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

avec Java Discussion :

Récupérer informations d'une base de donnée et l'insérer dans une variable


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Récupérer informations d'une base de donnée et l'insérer dans une variable
    Bonjour à toutes et à tous,

    J'avais, il a de cela une semaine et demi, posté un message sur le forum pour me connecter à une base de donnée SQL Server. Désormais la connexion fonctionne et j'arrive à imprimer dans la console toutes les informations désirées.

    Toutefois, je suis confronté à un autre problème. Je souhaiterais récupérer ces informations ( nombre de pièces utilisées, Poste de travail, Référence des pièces et produits ... ) pour les incrémenter dans une variable.
    Problème: Je ne parviens pas à trouver des informations sur le web concernant cette manipulation (que ce soit en Java ou dans la requête SQL utilisée en Java) afin de les incrémenter dans une variable, traité dans un autre programme JAVA. (elles doivent être lu sur un écran de tablette Android(ce n'est pas ma part du travail de créer l'intérface)).

    Je vous sollicite, car je n'ai même pas une bribe de programme, je ne vois pas du tout par quoi commencer.

    Merci d'avance de l'aide que vous pourrez m'apporter,

    PS : au risque de l'avoir posté sur une mauvaise rubrique du forum, je m'en excuse d'ors et déjà.


    Bonne journée,
    Crazy-Frog-67

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Tu te connectes avec JDBC

    Tu fais un select en sql via l'api JDBC

    Tu injectes le résultat dans ta variable

    Tu incrémentes ce résultat.

    Tu fais un update en sql via l'api JDBC en utilisant la valeur de ta variable

    Tu fermes la connexion


    Le sql à utiliser est tout à fait standard.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci de ta réponse,

    Pour ce qui est de la requête j'ai la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    st = conn.createStatement();
    rst = st.executeQuery("SELECT b.DOS, b.BH_ID, LIBSEQ, b.GAMSEQ, CENTRE, POSTE, b.PINO, b.FABTPS, REF, g.QTE FROM ERP211..BH as b, ERP211..BG as g "
    + " WHERE b.DOS = '998' AND POSTE LIKE 'RP-W%' AND MAX(PREVBLDT) ");
    Ma question du coup est : " Faut-il que j'injecte la valeur dans la variable directement dans la requête ? Ou cela doit se faire hors de celle-ci?" Je pose cette question car je suppose que l'update doit se faire en requête SQL.

  4. #4
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Salut,

    Ton execute query va te retourner un objet resultset, tu dois ensuite manipuler ce resultset pour récupérer les valeurs retournées par la requête.
    Tu peux mettre ces valeurs dans des variables et ensuite les manipuler depuis ton code java.
    Une fois que les valeurs sont mises à jour, tu peux créer une requête update pour mettre à jour le contenu de ta base de donnée.

    Il ne faut pas oublier de fermer la connexion une fois le traitement terminé.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Du coup j'ai pleins de questions:

    1) Pour fermer la connexion j'ai en fin de programme la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       rst.close();
    	      st.close();
    	    } catch (Exception e) {
    	      e.printStackTrace();
    Est-ce que cette dernière suffit à la fermeture de la connexion ?

    Ou préférera-t-on le code suivant :
    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
     
    catch (SQLException ex) {
        // exceptions
     finally {
        if (rst != null) {
            try {
                rst.close();
            } catch (SQLException e) { /* ignoré */}
        }
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) { /* ignoré */}
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) { /* ignoré */}
        }
    2) Question qui n'a rien à voir directement avec le post mais je souhaite récupérer la commande la plus récente. La commande "MAX(PREVBDLT)" me fait-elle remonter la commande la plus récente ?

  6. #6
    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 : 55
    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
    Salut,
    Citation Envoyé par Crazy-Frog_67 Voir le message
    Est-ce que cette dernière suffit à la fermeture de la connexion ?
    Oui. Tout ce qui a été créé à partir de la connexion sera fermé également.

    En revanche :

    1. Il est préférable d'utiliser un pool de connexions surtout s'il y a un accès multiple (multi utilisateur ou multi process). Cela limite la charge en ressource, y compris pour le SGBD.
      Donc de ne pas fermer une connexion après s'en être servie, mais de la rendre au pool.
    2. Il est préférable d'utiliser un try-with-resource pour simplifier le code, le rendre plus lisible.

  7. #7
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Citation Envoyé par Crazy-Frog_67 Voir le message

    1) Pour fermer la connexion j'ai en fin de programme la commande suivante:
    C'est ta connexion que tu dois fermer, et elle fermera donc tout ce qui lui est rattaché.

    Et il vaut effectivement mieux fermer avec un try-with-resources.

    Citation Envoyé par Crazy-Frog_67 Voir le message

    2) Question qui n'a rien à voir directement avec le post mais je souhaite récupérer la commande la plus récente. La commande "MAX(PREVBDLT)" me fait-elle remonter la commande la plus récente ?
    Si PREVBDLT est une valeur représentant la date de la commande, oui

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Tout d'abord, merci à vous deux me répondre si rapidement, je suis agréablement surpris.

    Ensuite je regarde actuellement pour le Pool de connexion.

    Cependant, pour incrémenter la valeur du nombre de pièces produites (par exemple), je ne saisis pas la commande requise pour obtenir uniquement cette valeur-ci parmi toutes les colonnes sorti par le ResultSet.
    De plus, pour la commande try-with-ressources, elle s'inscrit à la place du try ? ou à un autre endroit ?

  9. #9
    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 : 55
    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 Crazy-Frog_67 Voir le message
    De plus, pour la commande try-with-ressources, elle s'inscrit à la place du try ? ou à un autre endroit ?
    Oui. Et du coup tu peux supprimer le finally.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Le finally ? Signifie le Catch ?
    En le remplaçant, Java n'a pas l'air d'apprécié

    De plus, j'ai pu lire sur un site que de base la pool est limité à 8 connexions ? (Dans le cadre de notre projet ce sera 7 connexions max) Faut-il de manière à sécuriser la chose le rajouter ?

  11. #11
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Citation Envoyé par Crazy-Frog_67 Voir le message
    Cependant, pour incrémenter la valeur du nombre de pièces produites (par exemple), je ne saisis pas la commande requise pour obtenir uniquement cette valeur-ci parmi toutes les colonnes sorti par le ResultSet.
    Tu peux trouver la doc sur la manipulation des resultset et l'utilisation du try with resources.

    https://docs.oracle.com/javase/tutor...etrieving.html

    https://docs.oracle.com/javase/tutor...urceClose.html

    Pour le RS, il faut surtout comprendre que tu devras d'abord séléctionner une ligne (vu que ta requête peut retourner plusieurs lignes de la DB), puis dans cette ligne, les champs qui t'intéressent.
    Si tu as trié au préalable, la ligne devrait être la première

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci bien pour la documentation, je vais la lire scrupuleusement et me retournerait vers vous si je rencontre des difficultés.

    Faut-il que je crée la partie mentionnant la DAO ?

    Bon appétit

  13. #13
    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 : 55
    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 Crazy-Frog_67 Voir le message
    Le finally ? Signifie le Catch ?
    Non, finally signifie finally. Le catch tu le laisse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try(Connection connection=DriverManager.getConnection( ... ) {
       ...
    }catch(SQLException e) {
        ...
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try(PrepareStatement statement = connection.prepareStatement(...)) {
         ...
    }catch(SQLException e) {
        ...
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try(ResultSet resultSet = statement.executeQuery()) {
       ...
    }catch(SQLException e) {
        ...
    }
    Citation Envoyé par Crazy-Frog_67 Voir le message
    De plus, j'ai pu lire sur un site que de base la pool est limité à 8 connexions ? (Dans le cadre de notre projet ce sera 7 connexions max) Faut-il de manière à sécuriser la chose le rajouter ?
    Ça dépend du pool que tu utilises (custom, fourni (genre celui de tomcat)). Et c'est en général paramétrable pour ceux existant et pour du custom tu fais ce que tu veux. Mais il y a aussi la configuration du SGBD qui limite le nombre max de connexions, donc le nombre max de connexions du pool doit être inférieure ou égale à celle du SGBD forcément.

  14. #14
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Un pool de connexion est un composant purement technique qui doit être inconnu des DAO (un dao n'a pas pour responsabilité de savoir d'où vient sa connection).

    Un exemple sur la manière de l'exposer:

    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
     
    /*
     * This file is part of the Yildiz-Engine project, licenced under the MIT License  (MIT)
     *
     *  Copyright (c) 2018 Grégory Van den Borre
     *
     *  More infos available: http://engine.yildiz-games.be
     *
     *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
     *  documentation files (the "Software"), to deal in the Software without restriction, including without
     *  limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
     *  of the Software, and to permit persons to whom the Software is furnished to do so,
     *  subject to the following conditions:
     *
     *  The above copyright notice and this permission notice shall be included in all copies or substantial
     *  portions of the Software.
     *
     *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
     *  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
     *  OR COPYRIGHT  HOLDERS BE LIABLE FOR ANY CLAIM,
     *  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  SOFTWARE.
     *
     */
    package be.yildizgames.module.database;
     
    import be.yildizgames.common.logging.LogFactory;
    import org.jdbcdslog.ConnectionLoggingProxy;
    import org.jooq.SQLDialect;
    import org.slf4j.Logger;
     
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;
     
    /**
     * Provide connections to the database system.
     *
     * @author Grégory Van den Borre
     */
    public abstract class DataBaseConnectionProvider implements AutoCloseable {
     
        private static final Logger LOGGER = LogFactory.getInstance().getLogger(DataBaseConnectionProvider.class);
     
        /**
         * Selected Database system.
         */
        private final DatabaseSystem system;
        /**
         * Connection URI.
         */
        private String uri;
        /**
         * Database connection login.
         */
        private final String login;
        /**
         * Data base connection password.
         */
        private final String password;
     
        /**
         * <code>true</code> will log every sql request.
         */
        private boolean debug;
     
        /**
         * Create a new Database connection provider.
         *
         * @param system Database system to use.
         * @param properties Properties holding connection data.
         * @param root Flag to check if the connection is root or not.
         * @throws AssertionError if a parameter is null or invalid.
         */
        //@Ensures ("this.system == system")
        //@Ensures ("this.system != null")
        //@Ensures ("this.login == properties.dbUser")
        //@Ensures ("this.password == properties.dbPassword")
        protected DataBaseConnectionProvider(final DatabaseSystem system, final DbProperties properties, boolean root) {
            if (properties == null) {
                throw new AssertionError("Properties cannot be null.");
            }
            if (system == null) {
                throw new AssertionError("system cannot be null.");
            }
            Properties p = new Properties(System.getProperties());
            p.put("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
            p.put("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "info");
            p.put("org.jooq.no-logo", "true");
            System.setProperties(p);
            this.login = root ? properties.getDbRootUser() : properties.getDbUser();
            this.password = root ? properties.getDbRootPassword() : properties.getDbPassword();
            this.uri = system.getUrl(properties);
            this.system = system;
            assert this.invariant();
        }
     
        /**
         * Activate debug mode to log all queries.
         */
        public final void setDebugMode() {
            this.debug = true;
        }
     
        /**
         * Simple check on database.
         *
         * @throws SQLException thrown if connection failed.
         */
        public final void sanity() throws SQLException {
            LOGGER.info("Checking database connection...");
            try (Connection c = this.getConnection()) {
                LOGGER.info("Checking database connection successful.");
            } catch (SQLException e) {
                LOGGER.error("Database connection failed.");
                throw e;
            }
        }
     
        /**
         * Retrieve a connection to the data base. Do not forget to release it with
         * Connection.close()
         *
         * @return The created database connection.
         * @throws SQLException In case the connection retrieving throws it.
         */
        public final Connection getConnection() throws SQLException {
            Connection c = this.getConnectionImpl();
            if (this.debug) {
                c = ConnectionLoggingProxy.wrap(c);
            }
            return c;
        }
     
        /**
         * @return The dialect for this system.
         */
        public final SQLDialect getDialect() {
            return this.system.getDialect();
        }
     
        public final String getDriver() {
            return this.system.getDriver();
        }
     
        public final String getUri() {
            return uri;
        }
     
        protected final DatabaseSystem getSystem() {
            return system;
        }
     
        protected final String getLogin() {
            return login;
        }
     
        protected final String getPassword() {
            return password;
        }
     
        protected final boolean isDebug() {
            return debug;
        }
     
        /**
         * @return A database connection from the underlying implementation.
         * @throws SQLException When connection cannot be retrieved.
         */
        protected abstract Connection getConnectionImpl() throws SQLException;
     
        private boolean invariant() {
            if (this.login == null) {
                LOGGER.error("login cannot be null.");
                return false;
            }
            if (this.password == null) {
                LOGGER.error("password cannot be null.");
                return false;
            }
            if (this.uri == null) {
                LOGGER.error("uri cannot be null.");
                return false;
            }
            return true;
        }
    }
    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
     
    /*
     * This file is part of the Yildiz-Engine project, licenced under the MIT License  (MIT)
     *
     *  Copyright (c) 2018 Grégory Van den Borre
     *
     *  More infos available: http://engine.yildiz-games.be
     *
     *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
     *  documentation files (the "Software"), to deal in the Software without restriction, including without
     *  limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
     *  of the Software, and to permit persons to whom the Software is furnished to do so,
     *  subject to the following conditions:
     *
     *  The above copyright notice and this permission notice shall be included in all copies or substantial
     *  portions of the Software.
     *
     *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
     *  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
     *  OR COPYRIGHT  HOLDERS BE LIABLE FOR ANY CLAIM,
     *  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  SOFTWARE.
     *
     */
     
    package be.yildizgames.module.database;
     
    import be.yildizgames.common.logging.LogFactory;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import org.slf4j.Logger;
     
    import java.sql.Connection;
    import java.sql.SQLException;
     
    /**
     * C3P0 implementation for a connection provider.
     *
     * @author Grégory Van den Borre
     */
    final class C3P0ConnectionProvider extends DataBaseConnectionProvider {
     
        private static final Logger LOGGER = LogFactory.getInstance().getLogger(C3P0ConnectionProvider.class);
     
        /**
         * Time in seconds.
         */
        private static final int ONE_HOUR = 3600;
     
        /**
         * Time in seconds.
         */
        private static final int HALF_HOUR = 1800;
     
        /**
         * C3P0 data source.
         */
        private final ComboPooledDataSource cpds;
     
        private boolean open = false;
     
        /**
         * Build a C3P0 connection provider, set the default C3P0 logger silent, the max idle time is 1 hour, autocommit is set to true.
         *
         * @param system     Database system to use.
         * @param properties Properties holding connection data.
         * @throws SQLException         If an exception occurs when building the object.
         * @throws NullPointerException if a parameter is null.
         */
        C3P0ConnectionProvider(final DatabaseSystem system, final DbProperties properties, boolean root) throws SQLException {
            super(system, properties, root);
            System.setProperty("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "WARNING");
            System.setProperty("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
            this.cpds = new ComboPooledDataSource();
            try {
                this.cpds.setDriverClass(system.getDriver());
            } catch (Exception e) {
                LOGGER.error("Error in pool", e);
                throw new SQLException("Cannot load pool driver.", e);
            }
            this.cpds.setJdbcUrl(this.getUri());
            this.cpds.setUser(this.getLogin());
            this.cpds.setPassword(this.getPassword());
            this.cpds.setMaxIdleTime(ONE_HOUR);
            this.cpds.setMaxIdleTimeExcessConnections(HALF_HOUR);
            this.cpds.setAutoCommitOnClose(true);
        }
     
        C3P0ConnectionProvider(final DatabaseSystem system, final DbProperties properties) throws SQLException {
            this(system, properties, false);
        }
     
        @Override
        protected Connection getConnectionImpl() throws SQLException {
            return this.cpds.getConnection();
        }
     
        @Override
        public void close() {
            if(open) {
                this.cpds.close();
                this.open = false;
                LOGGER.info("Closed database connection pool.");
            }
        }
    }

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Bonjour à tous,

    Après quelques jours de repos, j'ai repris le projet. Je me suis arrêté à l'affichage de l'ensemble des variables. Cependant, le résultat obtenu dans la console (photo ci- jointe) m'affiche l'ensemble des commandes, or je souhaite une seule et unique commande qui est la plus "pressante". Je joins le code (requête SQL) ci-dessous :
    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
    try {
    	st = conn.createStatement();
    	rst = st.executeQuery("SELECT DISTINCT b.DOS, b.BH_ID, LIBSEQ, b.GAMSEQ, CENTRE, POSTE, b.PINO, b.FABTPS, REF, g.QTE FROM ERP211..BH as b, ERP211..BG as g "
    			+ " WHERE b.DOS = '998' AND POSTE = 'RP-WS1' AND PREVBLDT = '2016-06-17'");
     
    	ResultSetMetaData rstMeta = rst.getMetaData();
    	 for(int i = 1; i <= rstMeta.getColumnCount(); i++)
    	       System.out.print("\t" + rstMeta.getColumnLabel(i) + "\t* ");
     
    	      System.out.println("\n**********************************");
     
    	      while(rst.next()){			
    	    	  for(int i = 1; i <= rstMeta.getColumnCount(); i++)
    	    	  System.out.print("\t" + rst.getObject(i).toString() + "\t |");
    	    	  System.out.println("\n-------------------------------------------------------------------------------------------------------------------------------");
    	    	}
    Ensuite pour ce qui est du Pool j'ai repris le programme proposé ci-dessus (en cours d'adaptation), je souhaitais toutefois savoir si il doit appartenir à la même classe que l'ensemble du code ou bien il doit être une classe à lui seul?



    Merci d'avance pour votre aide, au combien précieuse !
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/04/2016, 14h15
  2. Réponses: 5
    Dernier message: 13/06/2014, 14h14
  3. [OpenOffice][Base de données] Récupérer les données d'un fichier .txt et les insérer dans une base de données
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 05/08/2009, 10h52
  4. Récupérer l'id d'un bouton radio et l'insérer dans une base de donnée
    Par narama87 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/04/2009, 13h18
  5. Réponses: 4
    Dernier message: 22/02/2007, 10h01

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