web-dev-qa-db-fra.com

Connexion d'une base de données Microsoft Access à Java à l'aide de JDBC et compilation

pour un projet de base de données d'école, nous créons un programme de base de données (interface utilisateur graphique et base de données). À l'aide de Microsoft Access 2010, j'ai créé la base de données et y ai ajouté des exemples de données. Je l'ai enregistrée au format .mdb et l'ai placée dans le dossier de mon projet.

Lors de son exécution dans Eclipse, le code suivant fonctionne correctement, se connecte et récupère même la requête. Cependant, j'estime que je ne parviens pas à exporter le code dans un fichier jar et à l'exécuter (ce qui est nécessaire pour le projet; donnez-leur une copie de travail de votre programme sur un CD ou une clé USB) et je ne parviens pas non plus à porter le fichier. Code sur Netbeans pour le faire fonctionner, ainsi que d'essayer de compiler sur une machine Linux. 

J'imagine que c'est un problème d'inclusion de pilotes ou d'utilisation d'un accès Microsoft. L'erreur que je reçois lors de l'exécution du fichier jar ou de Netbeans est indiquée sous le code. Je demande donc soit comment inclure les pilotes pour rendre le programme portable, ou comment puis-je aborder ce problème? 

Merci d'avance

import Java.sql.*;

public class JDBCTest {
    static Connection connection;
    static Statement statement;

    public static void main(String args[]){

        try {
            Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
            String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
            connection = DriverManager.getConnection( database ,"",""); 

            buildStatement();
            executeQuery();

        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Error!");
        }
    }

    public static void buildStatement() throws SQLException {
        statement = connection.createStatement();
    }

    public static void executeQuery() throws SQLException {

        boolean foundResults = statement.execute("SELECT * FROM tblStaff  AS x WHERE City='Calgary'");
        if(foundResults){
            ResultSet set = statement.getResultSet();
            if(set!=null) displayResults(set);
        }else {
            connection.close();
        }
    }

    public static void displayResults(ResultSet rs) throws SQLException {
        ResultSetMetaData metaData = rs.getMetaData();
        int columns=metaData.getColumnCount();
        String text="";

        while(rs.next()){
            for(int i=1;i<=columns;++i) {
                text+=""+metaData.getColumnName(i)+":\t";
                text+=rs.getString(i);
                //text+="</"+metaData.getColumnName(i)+">";
                text+="\n";
            }
            text+="\n";
        }

        System.out.println(text);

    }
}

L'erreur mentionnée ci-dessus:

 Java.sql.SQLException: [Microsoft] [Gestionnaire de pilotes ODBC] Nom de source de données non trouvé et aucun pilote par défaut spécifié 
 à Sun.jdbc.odbc.JdbcOdbc.createSQLException (JdbcOdbc.Java:6957) 
 à Sun.jdbc.odbc.JdbcOdbc.standardError (JdbcOdbc.Java:7114) 
 à Sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect (JdbcOdbc.Java:3073) 
 sur Sun.jdbc.odbc.JdbcOdbcConnection.initialize (JdbcOdbcConnection.Java:323) 
 à Sun.jdbc.odbc.JdbcOdbcDriver.connect (JdbcOdbcDriver.Java:174) 
 sur Java.sql.DriverManager.getConnection (DriverManager.Java:582) 
 sur Java.sql.DriverManager.getConnection (DriverManager.Java:207) 
 sur tldatabase.DataConnect.makeConnection (DataConnect.Java:35) 
 à tldatabase.Main.main (Main.Java:24) 
9
Moogle

Je sais que le message existait il y a des années, mais j'avais envie de répondre à la question pour ceux qui ne font que vivre cela actuellement. Il m'a fallu un certain temps pour connaître la réponse à la question. Voici donc la solution:

http://wiki.netbeans.org/FaqSettingHeapSize

Suivez les instructions "Exécution de la machine virtuelle Java 32 bits".

Tout ce que vous avez à faire est de trouver le fichier netbeans.conf dans le dossier d'installation de votre netbeans et de modifier le répertoire en procédant comme suit:

netbeans_jdkhome = "C:\Programmes\Java\jdk1.6.0_24"

pour ça:

netbeans_jdkhome = "C:\Fichiers de programme (x86)\Java\jdk1.6.0_21"

Le problème est que netbeans peut s'exécuter en 64 bits, mais MS Access ne prend en charge que le 32 bits. Nous espérons que cela résoudrait le problème. Veillez également à installer ceci:

http://www.Microsoft.com/download/en/details.aspx?displaylang=en&id=23734

10

Le problème principal réside dans la ligne:

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
  1. Assurez-vous que le fichier .mdb se trouve dans le bon répertoire.
  2. Vérifiez l'extension de fichier en tant que .mdb ou .mdbacc.

De plus, si vous souhaitez utiliser le même DSN à chaque fois, il est préférable d’ajouter le DSN (nom de source de données) au système respectif sur lequel la mdb est stockée.

1
Anil_irocks88

Je pense que votre application ne voit pas TLDATABASEDBM.mdb dans le répertoire actuel. Vous pouvez indiquer le chemin complet de ce fichier dans la chaîne de connexion ou ajouter un DSN système dans le gestionnaire ODBC, puis vous y connecter avec une chaîne de connexion telle que: jdbc:odbc:TLDATABASEDBM.

0
Michał Niklas
package javaapplication1;

import Java.sql.*;

public class MSaccess_archive {
public static void main(String[] args) {

    try {

       Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
// set this to a MS Access DB you have on your machine
String filename = "mdbTEST.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
database+= filename.trim() + ";DriverID=22;}"; // add on to the end 
// now we can get the connection from the DriverManager
Connection con = DriverManager.getConnection( database ,"","");

        Statement stmt = con.createStatement();

        stmt.execute("select * from student"); // execute query in table student

        ResultSet rs = stmt.getResultSet(); // get any Result that came from our query

        if (rs != null)
         while ( rs.next() ){

            System.out.println("Name: " + rs.getInt("Age") + " ID:       "+rs.getString("Course"));
            }

            stmt.close();
            con.close();
        }
        catch (Exception err) {
            System.out.println("ERROR: " + err);
        }
   }

}
0
Joseph Dominguez

Honnêtement, je n'aime pas ce que je vais dire ... mais ça a résolu le même problème pour moi ... mystérieusement ...: ((

sur la ligne où vous définissez la variable de base de données, j'ai changé ... ( .mdb) ... en ... (. mdb, * .accdb) ...

Tout le meilleur pour comprendre quelle différence cela a fait!

0
Vasu