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 Access


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut Java et Access
    Bonjour,

    Je débute dans le domaine des BDD avec java et j'ai pris un code sur le site pour accéder à un BD Access.

    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
    public static Connection connect(String fichier) 
    			throws ClassNotFoundException, SQLException {
     
    		Connection con;
     
    		try {
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=";
     
    			database += fichier.trim() + ";DriverID=22;READONLY=false}";
    			con = DriverManager.getConnection(database, "", "");
    			return con;
    		}catch(Exception e) {
    			System.out.println(e.getMessage());
    		}
     
    		return null;
    	}
    J'ai le "fameux" problème :
    - [Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié

    Dans mon ODBC j'ai une ligne :
    - MS Access Database 32 bits Pilote : Microsoft Access Driver (*.mdb, *.accdb)

    Donc déjà 2 questions me viennent :

    Est-ce que je doit utiliser la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
    En théorie je devrais utiliser la 2ème puisque je suis en 32 bits mais vu que mon pilote contient *.accdb ça favorise le 1er choix, non ?

    Et comment fais t'on pour être sûr que notre application fonctionne sur tous les PC ? (utilisant la version 32 et/ou 64 bits).



    EDIT : Apparemment j'ai rien compris avec ODBC. Pourriez-vous m'indiquer ce que représente Driver dans "jdbc:odbcriver"

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Personne ?

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Si tu debute, je te conseil de changer de BDD .... Access est la pire base que tu pouvais choisir !
    Pour commencer, si tu ne veux pas t’embêter avec un serveur SGBD (vue que tu debute) prend une base telque :
    - H2
    - Derby

    Ce sont des bases full java, et s'utilisent facilement !
    Personnellement, j'utilise H2 et tu trouvera les différents mode de connexion ici : http://www.h2database.com/html/featu...l#database_url
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Ok merci bien, je vais suivre ton conseil.

    EDIT: Le fait est que j'ai une BDD SQL, y'a t-il un moyen de la convertir en H2 ou d'automatiser un remplissage de la H2 avec les données de la BDD SQL ?

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Arf, vu que tu avais dis que tu débutais j'ai pas envisagé que tu avais déjà quelque chose dans access !
    C'est la base d'une application existante ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Non mais toute façon c'était même pas une base access mais une base SQL sortie tout droit de phpmyadmin qu'on m'a passée. Elle contient quelques données que j'aurais aimé exploiter via des listes ou autres menus sur une appli java. Mais sinon tant pis je me la retaperais à la main s'il le faut .

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par Halo2550 Voir le message
    ...une base SQL sortie tout droit de phpmyadmin qu'on m'a passée....
    Sur phpmyadmin normalement c'est du mySql ! tu dis que l'on te l'a passé .... ok mais de quel façon ? C'est une extraction ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Oui extraction mais comme l'extension est .sql je croyais que ...
    J'avoue si j'avais réfléchi 2s c'est vrai que le SQL serait un peu limite pour faire tenir un BDD

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    .sql est typiquement un script sql d'insertion. Le plus simple serait pour toi de le lire et de l'intégrer dans une truc comme hsqldb, derby ou h2. Comme ça t'aurais accès à une base de données, et tu t'emm* pas à dépendre d'access

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Ah cool donc si je comprend bien t'est en train de me dire que je vais pouvoir l'importer "automatiquement" dans h2?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    peut être avec des adaptations si le SQL n'est pas standard, mais oui.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Je reviens car j'ai trouvé ceci qui me semble être une bonne solution à mon problème :

    http://flywaydb.org/

    Voilà je met le lien si cela intéresse quelqu'un. En plus il existe sous plusieurs formes (API, ligne de commande, ...).

    Je n'ai pas encore testé mais je ferais un EDIT éventuellement.

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    J'ai fait ce bout de code sur eclipse pour créer une base H2 :

    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
    public class BaseDeDonnees {
     
    	public static Connection connect() 
    			throws ClassNotFoundException, SQLException {
     
    		Connection con;
     
    		try {
    			Class.forName("org.h2.Driver");
    			String url = "jdbc:h2:C:/Users/Yoann/Documents/bdd.h2.db";
    			con = DriverManager.getConnection(url, "root", "");
    			return con;
    		}catch(Exception e) {
    			System.out.println(e.getMessage());
    		}
     
    		return null;
    	}
     
    	public static void main(String[] args) {
    		try {
    			connect();
    		} catch (ClassNotFoundException | SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		try {
    			Thread.currentThread().sleep(100000);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    }
    Pourquoi cela ne me créé pas le fichier bdd.h2.db ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    de mémoire, ça devrait te créer un dossier C:/Users/Yoann/Documents/bdd.h2.db pas un fichier.
    Enssuite, pour viser la home de l'utilisateur mieux vaux utiliser la tilde en h2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String url = "jdbc:h2:~/Documents/bdd.h2.db";

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Ok pour la/le tilde, par contre je n'ai rien qui se créé, même pas un dossier.

    Dans la console à l'exécution j'ai "org.h2.Driver" qui s'affiche.

    EDIT : Ah bas oui j'avais un print, voilà le print stack trace

    java.lang.ClassNotFoundException: org.h2.Driver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at bdd.BaseDeDonnees.connect(BaseDeDonnees.java:18)
    at bdd.BaseDeDonnees.main(BaseDeDonnees.java:29)

    en gros il trouve pas le driver si je comprend bien

    REEDIT : Voilà c'est mieux avec le .jar dans les librairies
    Maintenant j'ai mon petit fichier.

    Par contre peux-t-on aller chercher la base dans le répertoire courant (celui du .jar) parce que le tilde c'est un peu court

  16. #16
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    de mémoire, ça devrait te créer un dossier C:/Users/Yoann/Documents/bdd.h2.db pas un fichier.
    pas tout a fait, en fait cela va créer un fichier dans le répertoire C:/Users/Yoann/Documents, et ce fichier sera nommé bdd.h2.db.h2.db
    De plus selon ses besoin la base H2 va créer aussi bdd.h2.db.lock.db voir bdd.h2.db.trace.db ...
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par Halo2550 Voir le message
    Par contre peux-t-on aller chercher la base dans le répertoire courant (celui du .jar) parce que le tilde c'est un peu court
    Que veux tu dire par c'est un peu court ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Par exemple si je met String url = "jdbc:h2:~/Documents/bdd";, la personne ne pourra pas déplacer son .jar et sa BDD sinon ca ne marche plus. Je voudrais que la seule contrainte soit que la BDD reste dans le même rép que le .jar donc en gros que l'url soit cheminDuJar/bdd

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Halo2550 Voir le message

    Par contre peux-t-on aller chercher la base dans le répertoire courant (celui du .jar)
    en java , repertoire courant != repertoire du jar


    Pour avoir dans le répertoire courant, suffit de faire:

    jdbc:h2:maBase

    c'est facile

    Pour le faire dans le répertoire du jar, faut déjà arriver à le trouver => ce n'est pas évident, il n'y a pas de méthode standard fiable à tous les coup :s

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Ok bah c'est nickel avec jdbc:h2:maBase merci à vous.

    Du coup pour récupérer mes données j'ai pris les requêtes 1 par 1 de mon fichier .sql et je les exécute via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Statement stm;
     
    stm.executeQuery(requete);
    et ça fonctionne du tonnerre

    Je conseille vraiment à tout ceux qui débute en base de données java comme moi de prendre H2. C'est assez simple au niveau de la syntaxe.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/12/2007, 17h48
  2. [Java et Access] Erreur de syntaxe
    Par jgavard dans le forum JDBC
    Réponses: 7
    Dernier message: 10/12/2006, 17h03
  3. Java et access
    Par teffal dans le forum JDBC
    Réponses: 5
    Dernier message: 06/09/2006, 17h11
  4. [SGBD/JDBC] [JAVA/MS ACCESS] problème résultat requête
    Par mouuaahh dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 04/04/2006, 11h31
  5. Adf java et ACCESS
    Par mehutilisateur dans le forum Access
    Réponses: 1
    Dernier message: 07/03/2006, 17h54

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