Ничего не происходит при чтении базы данных .accdb

Я пытаюсь создать программу, которая будет читать базу данных и выводить ее. Я следовал руководству по адресу http://www.codeproject.com/Articles/35018/Access-MS-Access-Databases-from-Java. Но когда я запускаю свою программу, ничего не происходит. Даже ошибок нет...

Наверное, я что-то упустил, но не знаю, что это может быть. Вот мой код:

import java.sql.*;

public class ReadDB {

public static void ReadDB() {

    try{
        //Source: http://www.codeproject.com/Articles/35018/Access-MS-Access-Databases-from-Java
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=ratingdb.accdb;";
        Connection conn = DriverManager.getConnection(database, "", "");
        Statement s = conn.createStatement();

        //Read Table
        String selTable = "SELECT * FROM RATINGS";
        s.execute(selTable);
        ResultSet rs = s.getResultSet();
        while((rs!=null) && (rs.next()))
        {
           System.out.println(rs.getString(1) + " : " + rs.getString(2));
        }




        s.close();
        conn.close();

    } catch(Exception e){
        System.out.println ("Unable to connect to the database");
        System.out.println ("Exception: " + e.getMessage());
    }



}

} После комментария Черной Пантеры я получил эту ошибку: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x13f4 Thread 0x1204 DBC 0x42170d4

EDIT: Произошла новая ошибка: Exception: [Microsoft][ODBC Microsoft Access Driver] Not a valid file name. Означает ли это, что драйвер, который я использую, не существует?


person ikhebgeenaccount    schedule 09.05.2014    source источник
comment
Не проглатывайте исключения, регистрируйте их, распечатывайте трассировку стека, в противном случае сообщайте об исключении или обрабатывайте исключение правильно. Не просто игнорируйте их!   -  person Mark Rotteveel    schedule 09.05.2014
comment
Если вы используете Java 8: Java 8 больше не включает JdbcOdbcDriver   -  person Mark Rotteveel    schedule 09.05.2014
comment
Также может быть проблема с вашим DSN...   -  person Thirumalai Parthasarathi    schedule 09.05.2014


Ответы (1)


Даже если он выдает исключения, вы не сможете их увидеть, потому что вы неправильно обработали ошибки. Вы не должны просто ловить исключения и двигаться дальше. Это противоречит всей концепции обработки исключений.

Вы должны сделать что-то подобное, чтобы ваши исключения были напечатаны в консоли.

try {

  //code that throws exceptions

} catch(Exception e) {
  e.printStackTrace(); //prints the error to the console and you missed it
}

EDIT: кажется, у вас возникли проблемы с разрешениями.

Выдержка с сайта http://support.sas.com/kb/40 /228.html

Эта проблема возникает по нескольким причинам, включая отсутствие разрешений на раздел реестра ODBC. В таком случае измените разрешения для раздела реестра следующим образом:

Запустите редактор реестра с помощью команды regedit: выберите Пуск ► Выполнить и введите regedit.

Если ваш файловый сервер SAS PC находится на 64-разрядной машине, разверните следующий ключ: HKEY_LOCAL_MACHINE ► ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ► WOW6432NODE ► ODBC.

Если ваш файловый сервер SAS PC находится на 32-разрядной машине, разверните следующий ключ: HKEY_LOCAL_MACHINE ► ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ► ODBC.

Щелкните правой кнопкой мыши папку ODBC и выберите «Разрешения».

Убедитесь, что идентификатор входа в систему, под которым запущен процесс SAS, имеет полный доступ. Проблема также может возникать из-за старых драйверов ODBC от Microsoft, особенно из Office 2007. Чтобы установить более новые драйверы ODBC, перейдите на распространяемый компонент Microsoft Access Database Engine 2010.

Если у вас 32-разрядная версия Microsoft Office, загрузите файл AccessDatabaseEngine.exe. Загрузите другой драйвер ODBC, только если у вас 64-разрядная версия Microsoft Office.

Если вы пытаетесь создать файл .mdb и использовать его, сделайте это

go to File -> Options -> General, and set the Default File Format to Access 2002-2003

И измените URL вашей базы данных на

"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=ratingdb.mdb;";

использовать файл .mdb.

Чтобы использовать файл .accdb, попробуйте сделать это,

"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=ratingdb.accdb;";
person Thirumalai Parthasarathi    schedule 09.05.2014
comment
Ты прав. Спасибо за этот совет! Смотрите мое редактирование ошибки, которую я получил. - person ikhebgeenaccount; 09.05.2014
comment
Это помогло, однако я получаю другую ошибку... Он говорит: Exception: [Microsoft][ODBC Microsoft Access Driver] Not a valid file name. Означает ли это, что драйвер, который я использую, не существует? - person ikhebgeenaccount; 09.05.2014
comment
@ikhebgeenaccount (кстати: пожалуйста, измените имя пользователя), скорее всего, вам нужно указать полный путь к файлу базы данных. - person Mark Rotteveel; 09.05.2014
comment
@MarkRotteveel Но когда я экспортирую свой проект, помещаю базу данных в банку и перемещаю банку, путь больше не правильный ... Это было бы не очень полезно. - person ikhebgeenaccount; 09.05.2014
comment
@ikhebgeenaccount Вы проверили свой DSN? - person Thirumalai Parthasarathi; 09.05.2014
comment
@BlackPanther Да, я сделал. Казалось, все в порядке... Я смотрел на эту ссылку , я подумал, что это может помочь мне решить проблему с путем. - person ikhebgeenaccount; 09.05.2014
comment
@MarkRotteveel Я думаю, что путь к файлу не будет проблемой, если файл .accdb находится в том же каталоге, что и файл класса Java. - person Thirumalai Parthasarathi; 09.05.2014
comment
@ikhebgeenaccount Это для создания файла .mdb. Я думаю, это поможет вам лучше - person Thirumalai Parthasarathi; 09.05.2014
comment
@ikhebgeenaccount Помещение базы данных в банку сделает ее полностью недоступной. И мое предложение было отправной точкой для устранения проблемы. Например: если он работает с фиксированным путем, вам просто нужно (например) найти файл базы данных и создать строку подключения во время выполнения или выяснить, какой относительный путь будет работать. - person Mark Rotteveel; 09.05.2014
comment
@BlackPanther Я не уверен на 100% в правилах, используемых для поиска файла из ODBC, он также может быть из корня приложения или проекта IDE (не обязательно совпадает с расположением файла класса) - person Mark Rotteveel; 09.05.2014
comment
@ikhebgeenaccount Марк прав ... вам следует переосмыслить размещение файла базы данных в банке. Вы можете попытаться извлечь файл базы данных из банки, поместить его в предопределенное место и использовать. - person Thirumalai Parthasarathi; 09.05.2014
comment
@MarkRotteveel Итак, я попробовал путь, но когда я вставляю путь: DBQ=D:\Users\Lars\Desktop\ratingdb.accdb;, я получаю эту ошибку: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ ). - person ikhebgeenaccount; 09.05.2014
comment
@ikhebgeenaccount это просто означает, что вам нужно избегать обратной косой черты .. то есть D:\\Users\\Lars и так далее - person Thirumalai Parthasarathi; 09.05.2014
comment
@BlackPanther Путь работал, когда экранировал обратную косую черту. Спасибо за вашу помощь, теперь я попытаюсь найти способ найти путь к основному классу (который я нашел здесь. - person ikhebgeenaccount; 09.05.2014
comment
re: последний образец строки подключения в вашем ответе: Microsoft Access Driver ( *.accdb) не является допустимым именем драйвера ODBC. Правильное имя — Microsoft Access Driver (*.mdb, *.accdb) для нового драйвера ODBC ядра СУБД Access. - person Gord Thompson; 09.05.2014
comment
@GordThompson: Спасибо, что указали на это ... Я обновил свой ответ .. :) - person Thirumalai Parthasarathi; 10.05.2014