Подключение к базе данных доступа из 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)
Ответы
Ответ 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.
(отказ от ответственности, я разработчик).
Ответ 4
UCanAccess - бесплатный Java JDBC-драйвер с открытым исходным кодом для баз данных Access. Для получения дополнительной информации о том, как его использовать, см.
Манипулирование базы данных Access с Java без ODBC
Ответ 5
Пройдите по ссылке, которая поможет вам в этом.
http://www.neowin.net/forum/topic/887410-java-ms-access-driver-for-maclinux/
и вы можете отлаживать и сообщать нам, какая строка соединения вы передаете, чтобы получить соединение. Потому что я думаю, что вы должны назвать getConnection ниже
DriverManager.getConnection(conStr, "", "");