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 :

Java et H2 Database


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut Java et H2 Database
    Salut à tous!
    Voila je fais un logiciel en Java pour la collection philatélique de mon père (lol). Un onglet "Ajout", on remplit des TextField, un bouton "Ajouter" pour créer une entrée dans une base de données MySQL d'une table.
    Un autre onglet "Recherche" avec les mêmes champs, un bouton "Chercher" qui sort les résultats de la requête sous forme de table.
    http://www.hostingpics.net/viewer.ph...CollecFond.jpg
    http://www.hostingpics.net/viewer.ph...ilaCollecR.jpg

    J'ai compris la théorie que je trouve dans tous les tutos, mais je n'arrive pas à les appliquer à mon problème très concret :
    je sais pas si c'est possible, mais je voudrais avoir un fichier base de données que je pourrais intégrer aux répertoires du logiciel. Pour l'instant j'utilise MySQL Workbench avec lequel je pense avoir bien créé ma BD avec sa table et ses arguments, et j'ai sauvegardé sous .... ça m'a donné un fichier .mwb. Est ce que c'est bien ma base de données que je devrai donner en accés à mon prog? Pour l'instant je l'ai placé dans un répertoire du projet (sous Eclipse), en gros :

    PhilaCollec
    |_bin
    |_images
    |_BD
    | |_BD-PhilaCollec.mwb
    |_src

    D'autre part, dans le prog j'ai ça :
    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
     
    // Chargement du driver JDBC pour MySQL
    String nomDriver = "com.mysql.jdbc.Driver";
    try{
        Class.forName(nomDriver); 
    }catch(ClassNotFoundException cnfe){
        System.out.println("La classe "+nomDriver+" n'a pas été trouvée");
        cnfe.printStackTrace();
    }
     
    // Connection
    String url = "jdbc:mysql:./BD/ModelBD_PhilaCollec.mwb";
    String login = "log";
    String password = "pass";
    try{
        Connection connection = DriverManager.getConnection(url,login,password);
    //interaction avec la base
        } catch(SQLException sqle) {
            //cf Comment gérer les erreurs ? 
    } finally {
    }
    Bref chui un peu paumé j'avoue. Pour résumer, quel devrait être l'url de ma BD? Et comment inclure ma BD à mon projet pour qu'elle accompagne mon logiciel quand je l'installerai sur le PC de mon père?
    Merci infiniment à ceux qui prendront le temps de m'éclairer

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Pour l'url JDBC de ta BD, il faut se référer au type de logiciel de gestion de base de données que tu utilises.
    Par exemple, pour MYSQL, tu aurais:
    jdbc:mysql://localhost:3306/nom_base_donnees
    Par ailleurs, si tu veux utiliser une base de données qui sera embarquée dans ton logiciel, de sorte que les utilisateurs qui vont l'installer n'aient pas à installer aussi une base de données comme MYSQL, Oracle etc .., il faut dans ce cas là, prendre H2Database, ou SQlite, ou Derby ou HSQL etc ..
    moi je préfère H2Database qui est très bien, très rapide, bien documentée et fait en Java.

    Si tu veux utiliser H2Database par exemple, voici l'url jdbc que t'aurais à prendre
    jdbc:h2:/var/logiciel/database", "sa", ""
    où "/var/logiciel/database" est l'endroit où sera sauvegardé ta base de données embarquée
    sa -> le nom d'utilisateur pour se connecter
    et un mot de passe vide

    Cf -> http://www.h2database.com/html/tutor...ing_using_jdbc
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Okaaayyyy, c'est ça que je comprenais pas avec MySQL, en fait elle est obligée d'être liée à un serveur, et effectivement du coup impossible de l'utiliser offline, ou du moins de la porter et l'utiliser de façon indépendante.
    Nickel pour la solution H2Database, si elle est en Java c'est parfait on restera dans l'idée de la pure portabilité j'aime bien, je m'y mets de suite.
    Un très grand merci (en espérant que j'arrive à me dépatouiller avec toute la doc et que je tombe pas sur un os )!

    PS: je kiffe ta signature, c'est tellement vrai....

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut Résolution du problème
    Petit "tuto" si ça peut en aider certains.
    Donc je suis allé ici
    http://www.h2database.com/html/main.html
    J'ai télécharger l'installateur, j'ai installé.
    Puis il faut intégrer les classes au projet, pour cela on trouve la librairie *.jar (nommée "h2-<version>.jar") dans le répertoire "bin" à l'intérieur du répertoire d'installation (par exemple "c:\program files\H2" par défaut pour windows). Moi je l'ai copiée dans mon répertoire projet pour l'avoir sous la main mais ce n'est pas obligé. Je bosse sous Eclipse, donc un moyen pratique pour intégrer un *.jar au projet :
    - clic droit sur le projet
    - Build path => Configure build path
    - Onglet "Libraries" => bouton "Add external JARs"
    - vous sélectionner la librairie H2

    Vous pouvez maintenant accéder à toutes les fonctions vous permettant de créer et manipuler une base de données H2. Dans le code voila ce que ça peut donner (Attention le code qui suit est un copier coller de bouts de code dispatché dans un programme plus gros, certaines parties peuvent manquer, des déclarations ou des imports par exemple, je n'ai pas tout vérifié exhaustivement, donc c'est plus à titre d'exemple concret que de démo réelle. Je voulais juste montrer ce qui a marché pour moi donc il faudra probablement compléter ou modifier pour vous) :

    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
    import org.h2.jdbc.JdbcSQLException;
    import org.h2.message.DbException;
    
    import java.sql.Array;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    private boolean BDExistante = false;
    private String url;
    private String login = "root";
    private String password = "";
    private boolean BDExistante = false;
    private Connection connection;
    private Statement stmt;
    private String Requete;
    private int codeRetour;
    private ResultSet rsltSet;
    private ResultSetMetaData rsltSetMeta;
    
    // Chargement du driver JDBC pour MySQL
    // Là vous verrez vite si vous avez bien fait le boulot d'importation de la librairie
    		String nomDriver = "org.h2.Driver";
    		try{
    		    Class.forName(nomDriver); 
    		}catch(ClassNotFoundException cnfe){
    			JOptionPane.showMessageDialog(null, "Erreur de chargement de driver de base de données", "La classe "+nomDriver+" n'a pas été trouvée", JOptionPane.ERROR_MESSAGE);			
    		    dispose ();
    		}
    		System.out.println ("Driver H2 Database chargé...");
    
    // Se pose le problème de savoir si la Bd existe déjà ou pas. Car si elle existe // il ne faudra pas lancer la requête de création de table située plus bas,
    // sinon ça lève une exception. On essaie donc de se connecter à la base
    // avec la particularité IFEXISTS=TRUE qui lève une erreur si la base n'existe
    // pas, le booléen BDExistante reste alors à false, si la base existe
    // BDExistante devient true
    		// On vérifie que la base de données existe......
    		try{
    			url = "jdbc:h2:./src/BD/BDH2;IFEXISTS=TRUE";
    			connection = DriverManager.getConnection(url,login,password);
    			connection.close();
    			BDExistante = true;
    
    			System.out.println ("Base de données H2 détectée...");
    		} catch(SQLException sqle) {
    		}
    
    // On se connecte pour de bon cette fois, si la BD n'existait pas cette
    // connexion permet de la créer et de s'y connecter directement à la volée.
    // Si la BD existe on s'y connecte simplement.
    		try {
    			String url = "jdbc:h2:./src/BD/BDH2";
    			connection = DriverManager.getConnection(url,login,password);
    
    			System.out.println ("Connexion à la base de données H2...");
    			
    // Il faut créer un Statement à partir de la connection, cela nous permet
    // d'effectuer des requêtes
    			stmt = connection.createStatement();
    			
    			// Créer le modèle de BD seulement si la BD était
    // inexistante auparavant, càd si BDExistante est resté à false
    			if (!BDExistante){
    				System.out.println ("implémentation BD");
    				Requete = "create table PIECE (" +
    						" idPIECE identity," +
    						" SUJET varchar(100)," +
    						" TYPE varchar(100)," +
    						" RACE varchar(100)," +
    						" PAYS varchar(100)," +
    						" TOME varchar(100)," +
    						" ANNEE varchar(100)," +
    						" NUMERO varchar(100)," +
    						" VALEUR varchar(100)," +
    						" ETAT varchar(2)," +
    						" PRIX varchar(100)," +
    						" ANNEE_ACHAT varchar(100)," +
    						" COTE_NEUF varchar(100)," +
    						" COTE_BON varchar(100)," +
    						" COTE_ZERO varchar(100)," +
    						" ANNEE_COTE varchar(100)," +
    						" DESC varchar (300)," +
    						" PHOTO varchar (200)," +
    						" constraint CLEF_PRIM_idPIECE primary key (idPIECE))";
    
    // Les fonctions du statement permettent d'executer des requêtes
    // executeUpdate () pour les créations/modifications de la BD
    				codeRetour = stmt.executeUpdate (Requete);
    				System.out.println ("Base de données H2 implémentée...");
    			}
    		} catch(SQLException sqle) {
    			JOptionPane.showMessageDialog(null, "Il y a eu une erreur lors de l'implémentation de la base de données :\n"+Requete, "Erreur base de données", JOptionPane.ERROR_MESSAGE);
    			dispose ();
    		}
    
    
    
    // Insertion d'un tuple dans la base données
    Requete = "insert into PIECE (SUJET," +
    						" TYPE," +
    						" RACE," +
    						" PAYS," +
    						" TOME," +
    						" ANNEE," +
    						" NUMERO," +
    						" VALEUR," +
    						" ETAT," +
    						" PRIX," +
    						" ANNEE_ACHAT," +
    						" COTE_NEUF," +
    						" COTE_BON," +
    						" COTE_ZERO," +
    						" ANNEE_COTE," +
    						" DESC," +
    						" PHOTO) values (" +
    						"'"+SujetFld.getText()+"'," +
    						"'"+TypeFld.getText()+"'," +
    						"'"+RaceFld.getText()+"'," +
    						"'"+PaysFld.getText()+"'," +
    						"'"+TomeFld.getText()+"'," +
    						"'"+AnneeFld.getText()+"'," +
    						"'"+NumeroFld.getText()+"'," +
    						"'"+ValeurFld.getText()+"'," +
    						"'"+EtatLst.getSelectedItem()+"'," +
    						"'"+PxFld.getText()+"'," +
    						"'"+AnneeAchatFld.getText()+"'," +
    						"'"+CoteNeufFld.getText()+"'," +
    						"'"+CoteBonFld.getText()+"'," +
    						"'"+CoteZeroFld.getText()+"'," +
    						"'"+AnneeCoteFld.getText()+"'," +
    						"'"+DescriptionArea.getText()+"'," +
    						"'"+CheminPhotoCopie+"')";
    						
    			System.out.println(Requete);
    			try {
    				codeRetour = stmt.executeUpdate (Requete);
    			} catch (SQLException sqle) {
    				JOptionPane.showMessageDialog(null, "La requête suivante a provoqué une erreur :\n" + Requete, "Erreur base de données", JOptionPane.ERROR_MESSAGE);
    			}
    
    
    
    // Lecture de la base de données avec executeQuery()
    // cette fonction retourne un ResultSet grâce auquel on pourra exploiter
    // les résultats de la requête
    // Le ResultSetMeta permet notamment de récupérer les noms de colonne
    
    Requete = "select idPIECE, SUJET, TYPE, RACE, PAYS, NUMERO, DESC, PHOTO from PIECE";
    			//L'objet ResultSet contient le résultat de la requête SQL
    			rsltSet = stmt.executeQuery(Requete);
    			//On récupère les MetaData
    			rsltSetMeta = rsltSet.getMetaData();
    			
    
    // Petit algo pour afficher les lignes de résultats (pas de moi mais récupéré
    // sur ce site, Merci :)
    System.out.println("\n**********************************");
    			//On affiche le nom des colonnes
    			for(int i = 1; i <=  rsltSetMeta.getColumnCount(); i++)
    				System.out.print("\t" + rsltSetMeta.getColumnName(i).toUpperCase() + "\t *");
    			
    			System.out.println("\n**********************************");
    			
    			while(rsltSet.next()){			
    				for(int i = 1; i <=  rsltSetMeta.getColumnCount(); i++)
    					System.out.print("\t" + rsltSet.getObject(i).toString() + "\t |");
    				
    				System.out.println("\n---------------------------------");
    	
    			}
    Mon but est d'afficher les résultats dans une JTable mais je ne l'ai pas encore fait, il faut que j'instancie mon propre modèle de table et là c'est pas évident quand on l'a jamais fait ^^

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

Discussions similaires

  1. Connexion entre Java et .DBF (database)
    Par kortobi dans le forum JDBC
    Réponses: 5
    Dernier message: 11/09/2012, 10h58
  2. Réponses: 3
    Dernier message: 05/02/2008, 09h41
  3. [Java - Drools] Manipulation de fichiers / databases
    Par jacko2 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/01/2008, 15h13
  4. Menu « Java DB Database » en version 5.5 Beta 2
    Par jproto dans le forum NetBeans
    Réponses: 2
    Dernier message: 03/08/2006, 10h49
  5. Problème Java/MySql : "Unknown database"
    Par darkflo dans le forum JDBC
    Réponses: 3
    Dernier message: 24/03/2006, 11h34

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