Подключение базы данных Microsoft Access к Java с использованием JDBC и компиляция - PullRequest
9 голосов
/ 01 декабря 2010

для школьного проекта базы данных мы делаем программу базы данных (пользовательский интерфейс и база данных).Используя Microsoft Access 2010, я создал базу данных, заполнил ее некоторыми примерами данных, сохранил их в формате .mdb и поместил в папку моего проекта.

При запуске в eclipse следующий код работает нормально, подключается идаже получает запрос.Однако я нахожу, что не могу экспортировать код в jar-файл и запустить его (что необходимо для проекта, дать им рабочую копию вашей программы на компакт-диске или флэш-диске), и я также не могу перенестикод для Netbeans, чтобы он работал, а также попытка компиляции на машине Linux.

Я предполагаю, что это проблема с включением драйверов или попыткой использования доступа Microsoft.Ошибка, которую я получаю при запуске jar или при работе на Netbeans, приведена под кодом.Поэтому я спрашиваю, как мне включить драйверы, чтобы сделать программу переносимой, или как еще я могу решить эту проблему?

Заранее спасибо

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

    }
}

Ошибка, упомянутая выше:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
        at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at tldatabase.DataConnect.makeConnection(DataConnect.java:35)
        at tldatabase.Main.main(Main.java:24)

Ответы [ 5 ]

10 голосов
/ 20 февраля 2012

Я знаю, что пост был несколько лет назад, но я чувствовал, что хочу ответить на вопрос для тех, кто только сейчас испытывает это.Мне потребовалось некоторое время, чтобы узнать ответ на вопрос, поэтому вот решение:

http://wiki.netbeans.org/FaqSettingHeapSize

Следуйте инструкциям "Запуск 32-разрядной JVM".

Всевам нужно найти файл netbeans.conf в папке установки вашего NetBeans и изменить каталог следующим образом:

netbeans_jdkhome = "C: \ Program Files \ Java \ jdk1.6.0_24"

к этому:

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

Проблема в том, что netbeans может работать в 64-битной, но MSДоступ только поддержка 32-битных.Делая это, мы надеемся решить проблему.Также обязательно установите это:

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

1 голос
/ 20 марта 2014

Основная проблема заключается в строке:

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
  1. Убедитесь, что файл .mdb находится в правильном каталоге.
  2. Проверьте расширение файла как .mdb или .mdbacc.

Также, если вы хотите использовать один и тот же DSN каждый раз, лучше добавить DSN (имя источника данных) в соответствующую систему, в которой хранится mdb.

0 голосов
/ 23 сентября 2014
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 голосов
/ 18 февраля 2014

Честно говоря, мне не нравится то, что я собираюсь сказать ... но это решило ту же проблему для меня ... таинственно ...: (((

в строке, где вы определяете переменную базы данных, я изменил ... ( .mdb) ... на ... ( .mdb, * .accdb) ...

Всего наилучшего, чтобы понять, какая разница!

0 голосов
/ 01 декабря 2010

Я думаю, что ваше приложение не видит TLDATABASEDBM.mdb в текущем каталоге. Вы можете указать полный путь к этому файлу в строке подключения или добавить системный DSN в ODBC Manager, а затем подключиться к нему с помощью строки подключения, например: jdbc:odbc:TLDATABASEDBM

...