Подтвердить что ты не робот

Подключение к базе данных доступа из Linux

Я создал свое приложение и протестировал его под окнами, которые записывают/читают в/из файла DB доступа.

Но в реальном мире он будет запущен в среде linux, и теперь у меня большая проблема, похоже, что нет никаких драйверов для Linux для доступа к ms acess db, вот как я делаю подключение сейчас:

private static Connection getConnection() {
        if (connection == null) {
            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                String conStr = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + configuration.getAccessDbFile();
                connection = DriverManager.getConnection(conStr);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return connection;
    }

Кто-нибудь сталкивался с чем-то похожим на это, есть ли у кого-нибудь предложение, что я могу сделать?

Это исключение я получаю от linux:

java.lang.NullPointerException
        at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
4b9b3361

Ответ 1

Необычно для приложения, работающего в Linux, для доступа к базе данных MS Access или использования ODBC. ODBC - это технология Windows. Есть несколько вариантов для Linux, но это не общий сценарий.

Как вы обнаружили, на вашей Linux-машине нет драйверов Access ODBC, поэтому мост JDBC-ODBC не работает. Возможно, вы сможете установить подходящий драйвер ODBC, но я не знаю ни одного свободного или открытого источника. Опция defacto ODBC для linux:

Коммерческий драйвер для доступа на основе UnixODBC:

Драйвер JDBC типа 4, который может якобы подключаться к базам данных Access:

У меня нет личного опыта ни с одним из них. Драйвер JDBC типа 4 был бы идеальным, но я был бы настроен скептически, что он работает так же хорошо, как рекламируется.

(Я уверен, что у вас есть причины, но мне нужно задаться вопросом, почему вы используете базу данных Access, если планируете развертывание на машинах Linux. Я считаю, что единственная веская причина, по которой приложение Java использует базу данных Access, существующее приложение Access с пользовательским программированием, используемым для целей, отличных от Java-приложения. В противном случае существует ряд лучших опций. Также считайте, что если ваша основная причина использования Access заключается в том, что вы можете использовать Access как удобный графический инструмент для форм и отчетов, вы все равно можете хранить данные в менее ограничительной базе данных (Derby, SQLLite, MySQL, PostgreSQL, MS SQL Server и т.д.), а затем подключаться через ODBC из Access в базу данных.) Это позволит вам развернуть ваше приложение Java на linux, ваша база данных везде, где имеет смысл, и по-прежнему использовать Access для подключения к базе данных из окон. Я делал это несколько раз.)

Ответ 2

Используйте http://jackcess.sourceforge.net/

Вы можете читать/записывать базу данных Acceess из Linux или Windows с помощью Java.

Ответ 3

Если вы застряли в Access, но ваши взаимодействия с файлом базы данных довольно "просты" (например, вы не выполняете сложные SQL-запросы), вы можете использовать что-то вроде Jackcess. Это библиотека pure-java, которая позволяет вам манипулировать базой данных Access, но она не обеспечивает интерфейс jdbc, поэтому вам нужно написать код, используя Apache Jackcess.

(отказ от ответственности, я разработчик).

Ответ 5

Пройдите по ссылке, которая поможет вам в этом.

http://www.neowin.net/forum/topic/887410-java-ms-access-driver-for-maclinux/

и вы можете отлаживать и сообщать нам, какая строка соединения вы передаете, чтобы получить соединение. Потому что я думаю, что вы должны назвать getConnection ниже

DriverManager.getConnection(conStr, "", "");