JDBC драйвер MS Access връзка

Искам да свържа моя MS access файл с Java GUI програма, но имам проблем с връзката....

Имам Windows 7 64b и ms office 2007. Когато отворих диспечера на ODBC драйвери в контролния панел, не намерих никакъв драйвер за Microsoft Access (може би когато стартирах ODBC стартира 64-битовия ODBC, сега мисля, че стартира 32-битов ODBC. Прочетох това и го направих: "jdbc-odbc връзка за windows 7 64-битова машина.. 1. Щракнете с десния бутон върху Източник на данни (ODBC).. отидете на свойства, променете следното нещо

цел [ %SystemRoot%\SysWOW64\odbcad32.exe ] стартира в : [ %SystemRoot%\System32 ]

натиснете enter и продължете като източник на администратор: връзка към източник " ) Сега, когато стартирам в контролния панел ODBC, мога да видя драйвера екранна снимка

Моят програмен код (опитах два начина, но имам същата грешка):

        public void Connect() {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

 //    String DatabaseFile = "D:java/Invertory.mdb";       
//            String DATABASE =
//                    "jdbc:odbc:Driver="
//                    + "{Microsoft Access Driver (*.mdb, *.accdb)};"
//                    + "DBQ=" + DatabaseFile;`enter code here`
 String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (*.mdb, *.accdb);DBQ=Invertory.mdb";
           CONEX = DriverManager.getConnection(DATABASE);

        } catch (Exception X) {
          X.printStackTrace();
            //JOptionPane.showMessageDialog(null,e);
        }
    }

грешка

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Името на източника на данни не е намерено и не е посочен драйвер по подразбиране


person artiny    schedule 18.05.2013    source източник
comment
Проверихте ли дали ODBC компонентът е бил инсталиран, когато сте инсталирали Access?   -  person William Price    schedule 18.05.2013
comment
Не помня, но сега преинсталирах ms office 2007.   -  person artiny    schedule 18.05.2013
comment
Това е директният път, не е необходимо да създавате нов системен DSN, вероятно трябва да проверите пътя си до файла .mdb.   -  person Azad    schedule 18.05.2013
comment
Използвах този видеоклип: youtube.com/watch?v=Of4LRHOZoII във видеоклипа кодът работи, но за мен не е. Преинсталирах всички, но позволи на ms office, но все още има същата грешка.   -  person artiny    schedule 18.05.2013


Отговори (9)


Използвайте UCanAccess JDBC драйвер:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://<mdb or accdb file path>",user, password); 
for example: 
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb");

Така че за вашия пример ще бъде Connection conn=DriverManager.getConnection("jdbc:ucanaccess://"+path)

person Anthony O.    schedule 04.12.2014

Ако използвате 64-битов Windows, вероятно трябва да отидете на този път

C:/Windows/SysWOW64/odbcad32.exe

Тогава забелязах, че използвате директния път, вместо да създавате нов System DSN, вашият директен път е правилен до пътя до файла достъп, който трябва да дадете пълния път по този начин:

jdbc:odbc:Driver= Microsoft Access Driver (*.mdb, *.accdb);DBQ=path/to/Invertory.mdb"

За да получите пътя, вероятно трябва да използвате java.io.File, който има метод, който връща абсолютния път към файла, вижте примера:

import java.sql.*;
public class TestConnection {
    Connection con ;
    Statement st ;
    ResultSet rs ;
    String db;
    public TestConnection (){
        try{
            String path = new java.io.File("Invertory.mdb").getAbsolutePath();
        db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
            doConnection();
        } catch(NullPointerException ex){
                ex.printStackTrace();
            }

    }

    public void doConnection(){
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection(db);
            st = con.createStatement();
            rs = st.executeQuery("select * from Invertory");
            while(rs.next()){
                System.out.println(rs.getObject(1));
            }
        }catch(SQLException | ClassNotFoundException ex){
            System.out.println(ex.toString());

        }

    }
    public static void main(String...argS){
        new TestConnection();
    }
}
person Azad    schedule 18.05.2013
comment
String DATABASE =jdbc:odbc:Driver= Microsoft Access Driver (.mdb, *.accdb);DBQ=C:/Users/Kex/Documents/NetBeansProjects/database_form/database_form/Invertory.mdb; Низ DATABASE =jdbc:odbc:Driver= Microsoft Access Driver (.mdb, *.accdb);DBQ=C:\\Users\\Kex\\Documents\\NetBeansProjects\\database_form\\database_form\\Invertory .mdb; Опитах двупосочно, но не работи. Все още има грешка след стартиране. Аз съм на: C:/Windows/SysWOW64/odbcad32.exe - person artiny; 18.05.2013
comment
Опитах се да поставя този код след и преди низа DATABASE =jdbc:odbc:Driver= Microsoft Access Driver (.mdb, *.accdb);DBQ=C:/Users/Kex/Documents/NetBeansProjects/database_form/database_form‌​/Invertory. mdb; String DATABASE =jdbc:odbc:Driver= Microsoft Access драйвер (.mdb, *.accdb); и сега имам нещо друго: java.lang.NullPointerException tht означава, че се свързах с файл за достъп? - person artiny; 19.05.2013
comment
не, в тази функция не тук е: dropbox.com/sh/wfym48e5mkso83p/TzmBVCeUhZ - person artiny; 19.05.2013

Отговорих на подобен въпрос въведете описание на връзката тук преди известно време.

По принцип по това време:

  1. Можете да се свържете с Ms-Access от 32-битова Java чрез моста JDBC-ODBC
  2. Не можете да се свържете с 32-битов Odbc драйвер чрез JDBC-ODBC от 64-битова java. Имаше съобщение, което ви казва, че можете да се свържете само от 32 битови програми
  3. Въпреки че Microsoft предоставя 64-битов драйвер Ms-Access, той не работи с 64-битовия JDBC-ODBC драйвер на Java.

Оттогава изглежда има нов Ms-Access JDBC драйвер с отворен код Ms-Access JDBC драйвер. Нямам представа колко е добър.

person Bruce Martin    schedule 10.07.2013

Просто пропускате нещо в кода си точно тук:

db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;

Трябва да добавите {} между Driver= и )=;. Като това по-долу

db ="JDBC:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;
person KaJasB    schedule 15.12.2013

Проблемът е, че трябва да работите на Java 32 бита, опитайте се да инсталирате най-новия JDK и ще работи

Изпълнявам го с JDK версия "jdk-7u67-windows-i586.exe"

person Ahmed Salem    schedule 02.09.2014

На 64-битова система трябва:

  1. стартирайте като администратор accessdatabaseengine_64.exe
  2. стартирайте java - 7-64 бита - jre.
person jrjayswal    schedule 25.01.2017

ако работите в NETBEANS, след като разархивирате файла ucanacess.zip, добавете целия jar файл в classpath, като използвате прозореца на свойствата на проекта, щракнете върху раздела за компилиране и добавете jar файл, след което компилирайте и тествайте приложението.

person Manoj Pandey    schedule 07.05.2017

JDBC-ODBC MS-ACCESS ВРЪЗКАТА СПРЯ ДА РАБОТИ В JDK8. Реших проблема, като инсталирах JDK7 заедно с JDK8 на същия компютър, след като инсталирах JDK7, го зададох като JDK версия за използване в моя проект, както следва в Netbeans:

1. Щракнете с десния бутон върху проекта в списъка > щракнете върху свойства

2.ЩРАКНЕТЕ ВЪРХУ БИБЛИОТЕКИ В ЛЯВОТО ДЪРВО ЗА НАВИГАЦИЯ

3.ЩРАКНЕТЕ БУТОН УПРАВЛЕНИЕ НА ПЛАТФОРМИ > ЩРАКНЕТЕ БУТОН ДОБАВЯНЕ НА ПЛАТФОРМА...

4.СЛЕДВАЙТЕ СЪВЕТНИКА, ВЪПРЕКИ ЧЕ ПОКАЗВА СТАНДАРТНОТО ИЗДАНИЕ НА JAVA, КЛИКНЕТЕ НАПРЕД

5. НАВИГАЙТЕ ДО C:\Program Files (x86)\Java И ИЗБЕРЕТЕ ПАПКАТА НА JDK7 > КЛИКНЕТЕ НАПРЕД

6. АВТОМАТИЧНО ПОПЪЛВАНЕ НА ПОЛЕТО С ПРАВИЛНАТА ИНФОРМАЦИЯ... > СЛЕД ТОВА КЛИКНЕТЕ НА КРАИ

7. ИЗБЕРЕТЕ ПЛАТФОРМАТА JDK ОТ СПИСЪКА > КЛИКНЕТЕ ЗАТВОРИ > OK

8.JDK7 ТРЯБВА ДА СЕ ПОКАЗВА В ПАКЕТА НА БИБЛИОТЕКИ.

JDK7 в пакета с библиотеки Щракнете върху Назад в браузъра, за да се върнете тук, след като разгледате изображението. .

От тук нататък всичко трябва да върви гладко.

Надявам се да реши проблема ви.

Благодаря.

person J. Silvermann    schedule 01.12.2017

person    schedule
comment
Моля, опишете и вие какво правите. - person Rohit Gupta; 02.08.2015