wake-up-neo.com

Verbinden einer Microsoft Access-Datenbank mit Java mit JDBC und Kompilieren

für ein Schuldatenbankprojekt erstellen wir ein Datenbankprogramm (Benutzer-GUI und Datenbank). Mit Microsoft Access 2010 erstellte ich die Datenbank, füllte sie mit Beispieldaten, speicherte sie im .mdb-Format und legte sie in meinem Projektordner ab.

Wenn er in Eclipse ausgeführt wird, funktioniert der folgende Code gut, verbindet und ruft sogar die Abfrage ab. Ich finde jedoch, dass ich den Code nicht in ein jar exportieren und ausführen kann (was für das Projekt erforderlich ist, geben Sie ihm eine Arbeitskopie Ihres Programms auf einer CD oder einem Flash-Laufwerk), und ich kann das auch nicht portieren Code für Netbeans, damit es funktioniert und versucht, auf einer Linux-Maschine zu kompilieren. 

Ich gehe davon aus, dass dies ein Problem beim Einschließen von Treibern oder beim Versuch ist, Microsoft-Zugriff zu verwenden. Der Fehler, den ich bekomme, wenn das Glas oder Netbeans ausgeführt wird, ist unter dem Code angegeben. Ich frage mich also, wie ich Treiber einbinden kann, um das Programm portierbar zu machen, oder wie kann ich dieses Problem lösen? 

Danke im Voraus

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);

    }
}

Der oben erwähnte Fehler:

 Java.sql.SQLException: [Microsoft] [ODBC-Treibermanager] Datenquellenname nicht gefunden und kein Standardtreiber 
 Unter Sun.jdbc.odbc.JdbcOdbc.createSQLException (JdbcOdbc.Java:6957) angegeben ) 
 um Sun.jdbc.odbc.JdbcOdbc.standardError (JdbcOdbc.Java:7114) 
 um Sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect (JdbcOdbc.Java:3073) 
 bei Sun.jdbc.odbc.JdbcOdbcConnection.initialize (JdbcOdbcConnection.Java:323) 
 bei Sun.jdbc.odbc.JdbcOdbcDriver.connect (JdbcOdbcDriver.Java:174) .getConnection (DriverManager.Java:582) 
 unter Java.sql.DriverManager.getConnection (DriverManager.Java:207) 
 unter tldatabase.DataConnect.makeConnection (DataConnect.Java:35) 
 at tldatabase.Main.main (Main.Java:24) 
9
Moogle

Ich weiß, der Beitrag war vor Jahren, aber ich hatte das Gefühl, die Frage für diejenigen zu beantworten, die dies gerade erleben. Ich habe eine Weile gebraucht, um die Antwort auf die Frage zu kennen. Hier ist die Lösung:

http://wiki.netbeans.org/FaqSettingHeapSize

Folgen Sie dem "Ausführen der 32-Bit-JVM".

Sie müssen lediglich die netbeans.conf im Installationsordner Ihrer netbeans finden und das Verzeichnis wie folgt ändern:

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

zu diesem:

netbeans_jdkhome = "C:\Programme (x86)\Java\jdk1.6.0_21"

Das Problem ist, dass Netbeans möglicherweise in 64-Bit ausgeführt werden, aber MS Access unterstützt nur 32-Bit. Dies würde hoffentlich das Problem lösen. Stellen Sie auch sicher, dass Sie das installieren:

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

Das Hauptproblem liegt in der Zeile:

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
  1. Stellen Sie sicher, dass sich die MDB-Datei im richtigen Verzeichnis befindet.
  2. Überprüfen Sie die Dateierweiterung als .mdb oder .mdbacc.

Wenn Sie jedes Mal denselben DSN verwenden möchten, ist es besser, den DSN (Data Source Name) in das entsprechende System einzufügen, auf dem die MDB gespeichert ist.

1
Anil_irocks88

Ich denke, dass Ihre App TLDATABASEDBM.mdb nicht im aktuellen Verzeichnis sieht. Sie können den vollständigen Pfad zu dieser Datei in der Verbindungszeichenfolge angeben oder System-DSN in ODBC Manager hinzufügen und dann mit der Verbindungszeichenfolge wie folgt verbinden: 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

Ehrlich gesagt, ich mag es nicht, was ich sagen werde, aber es löste dasselbe Problem für mich ... auf mysteriöse Weise ...: ((((

in der Zeile, in der Sie die Datenbankvariable definieren, habe ich ... ( .mdb) ... in ... (. mdb, * .accdb) ... geändert.

Alles Gute, um herauszufinden, welchen Unterschied das gemacht hat!

0
Vasu