Connexion base access 2010

Soyez le premier à donner votre avis sur cette source.

Vue 7 774 fois - Téléchargée 1 366 fois

Description

Voici une classe permettant la connexion à une base Access 2010 (sans mot de passe) pour récupérer une table souhaitée dans un Vector de Vector d' Object.
Attention :
- Le programme doit être compiler en 32 bit car le driver ODBC pour Access 2010 n'existe que en 32 bit !
- Vous devez avoir installer le driver ODBC (recherchez "Moteur de base de données Microsoft Access 2010 redistribuable" sur internet)

Ceci est mon premier post de code, n'hésitez pas à me donner votre avis dessus...

Source / Exemple :


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.util.Vector;

public class AccessTable{
	private Vector<Vector<Object>> vvs_table = new Vector<Vector<Object>>(); // Tableau contenant la Table après un getTableInVector()
	private String path; // Chemin vers ma table Access (ne pas oublier les double back-slash "\\" ex: C:\\repertoire\\matable.accdb)
	private String table; // Nom de la Table
	private Connection conn;
	private Statement st;
	private boolean etap1 = false;  
	private boolean etap2 = false;  
	private boolean etap3 = false;
	
	/* Ces booleans me servent à vérifier que l'objet AccessTable est correctement utilisé

  • pour ne pas lancer une connexion sans avoir donner un chemin d'accès et une table
  • ou pour ne pas déconnecté si l'on ne sait pas connecté d'abord...
  • /
public AccessTable() throws SQLException { } public AccessTable(String pathtodb) { this.path = pathtodb; this.etap1 = true; } public AccessTable(String pathtodb, String tablename) { this.path = pathtodb; this.table = tablename; this.etap1 = true; this.etap2 = true; } public void setPathToDataBase(String s) throws Throwable { if(!this.etap3) { this.path = s; this.etap1 = true; } else { throw new Exception("AccessTable en cours d'utilisation"); } } public void setTableName(String s) throws Throwable { if(!this.etap3) { this.table = s; this.etap2 = true; } else { throw new Exception("AccessTable en cours d'utilisation"); } } public void connection() throws Throwable //Initialise la connexion { if( this.etap1 && this.etap2) { this.conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+this.path); this.st = this.conn.createStatement(); this.etap3 = true; } else { throw new Exception("AccessTable non configuré !"); } } public Vector<Vector<Object>> getTableInVector() throws Throwable // Récupération de la Table dans un Vector de Vector d'objet { if (this.etap3) { ResultSet rs = this.st.executeQuery("SELECT * FROM "+this.table); for(int i = 0; rs.next();i++) { Vector<Object> vs = new Vector<Object>(); for (int j = 1 ; j<= rs.getMetaData().getColumnCount();j++) { vs.add(rs.getObject(j)); } this.vvs_table.add(vs); } } else { throw new Exception("AccessTable non connecté"); } return this.vvs_table; } public void disconnection() throws Throwable // déconnexion { if (this.etap3) { this.st.close(); this.conn.close(); this.etap3 = false; } else { throw new Exception("AccessTable non connecté"); } } public static void main(String[] arg0) throws Throwable { Scanner sc = new Scanner(System.in); System.out.println("Chemin vers la DataBase ? (ex : C:\\\\directory\\\\myDataBase.accdb)"); String p = sc.next(); System.out.println("Nom de la table ?"); String t = sc.next(); AccessTable at = new AccessTable(); at.setPathToDataBase(p); at.setTableName(t); at.connection(); Vector<Vector<Object>> vvo_test = at.getTableInVector(); at.disconnection(); for(Vector<Object> vo : vvo_test) { System.out.println(vo.toString()); } } }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
306
Si tu veux modifier ta source, je vais te faire des commentaires plus précis :

- Au sujet des normes d'écriture Java
-- On ne met pas de _ dans les variables comme pour vvo_test qu'on nommerait plutôt vvoTest.
-- On nomme les méthode par des noms d'action donc disconnection ne va pas, on choisira plutot disconnect (deconnecter plutôt que deconnexion)
-- Les // servent a bloquer du code pour qu'il ne s'execute pas, si tu as des remarques à faire dans ton code, utilise /* */ et pour la javadoc /** */
-- les { s'ouvrent sur la ligne courante et se ferment sur une nouvelle ligne donc tu écris :
if(test==1){
//Code
}

Essaye de te créer une classe d'exception exprès. Il est préférable de propager un seul type d'exception pour qu'on sache ce qu'on attrape, donc tu peux catcher les SQLException et lever une exception personnalisée avec un message d'erreur dédié, ajoute bien l'exception dans le constructeur pour que tu gardes la trace (en faisant new ExceptionPerso("message", exceptionCatchee)).

Évite les throws Throable ou Exception.
Messages postés
2
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
16 juin 2011

Oui j'ai vu ! merci de l'exemple =) je pense que je vais refaire cette classe en tenant compte des exceptions... tu pourrais par contre être plus précis sur le fait que je ne respecte pas les normes java ? C'est pas que je pense les respecter mais je les utilise comme on me les a enseigné...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
306
Je viens juste de déposer une source qui permet d'accéder à une base oracle, ce n'est pas tout a fait la même chose mais tu peux jeter un œil sur la façon de gérer les exceptions.

http://www.javafr.com/codes/ACCES-BASE-ORACLE_53290.aspx
Messages postés
2
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
16 juin 2011

Non aucune remarque, les tiennes sont très constructives, comme dit je suis un débutant en la matière, cela me permettra de progresser... ce code est juste une aide de débutant pour débutant...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
306
C'est une utilisation assez personnelle et discutable d'une connexion.

Les mauvaises idées sont :
- Tu ne respectes pas les normes d'écriture en Java ;
- Stocker le résultat dans un tableau d'objet obligera à faire des cast ;
- Lever des exceptions de type Exception : tu aurais pu créer tes propres classes d'exceptions et des messages d'erreurs particuliers à chaque erreur ;
- Les throws Throwable systématiques t'empêchent d'attraper les exceptions liées à la base de donnes
- L'idée des trois booléens est bizarre, si tu gérais mieux les exceptions, tu t'en sortirais sans, et en plus, leurs noms ne sont pas explicites, tu aurais pu les appeler setPathOk, connexionOk... par exemple

Je ne te donne pas de note, si tu as des questions sur mes remarques, tu peux les poser,

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.