Удаление моста JDBC ODBC в Java 8
Начиная с Java 8, мост JDBC-ODBC больше не будет включен в JDK.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // classNotFoundException is thrown
Есть ли другое решение, соединяющее мост JDBC-ODBC?
6 ответов
Мы все еще можем использовать JDBC-ODBC Bridge в java 8, просто следуйте этому простому рецепту:
- Загрузите JDK 7 или JRE 7.
- Перейдите в папку JRE\lib и найдите файл rt.jar.
- Разархивируйте его (если у вас установлен WinRAR или 7zip) или вы можете переименовать его в rt.zip и разархивировать.
Скопируйте папки sun\jdbc и sun\security\action, сохраните структуру папок. т.е. вы должны иметь структуру папок, как показано ниже:
Sun --> Security --> Action --> JDBC
Откройте окно CMD. Перейдите в родительскую папку папки Sun. Запустите команду:
jar -cvf jdbc.jar sun
- Приведенная выше команда создаст файл с именем jdbc.jar
- Скопируйте JDBC.jar в свой JDK8 или JRE8.
lib
папка. Если это не сработает, попробуйтеlib\ext
папка. - Скопируйте jdbcodbc.dll из JRE\bin вашей установки JRE 7 в JRE\bin вашей установки JRE 8.
- Перезапустите свою JVM.
Ну, по моему мнению, эта запись в блоге сотрудника Oracle говорит обо всем:
Я бы порекомендовал вам использовать драйвер JDBC, предоставленный поставщиком вашей базы данных, или коммерческий драйвер JDBC вместо моста JDBC-ODBC.
Для какого приложения вы используете мост JDBC-ODBC?
- Если это производственный код, вы должны ИМХО заменить мост реальным драйвером, а устаревшую базу данных - реальным как можно скорее.
- Если это тестовый код, который взаимодействует с БД Access, электронной таблицей Excel или чем-то еще, к чему вы можете получить доступ через ODBC, попробуйте заменить его чистой базой данных Java, такой как H2
- Если вы используете его для специального доступа к устаревшим базам данных Access, скажем, для разработки и / или анализа, и действительно не можете или не хотите ничего обновлять, вы можете довольно долго придерживаться JDK 7 до даты окончания его жизни и, вероятно, далеко за ее пределами
Есть ли другое решение, соединяющее мост JDBC-ODBC?
Официальные позиции Sun и Oracle уже давно таковы:
[JVM-связанный] мост JDBC-ODBC следует рассматривать как переходное решение [...] Oracle не поддерживает мост JDBC-ODBC.
Тем не менее, мой работодатель, OpenLink Software, производил коммерческие Мосты Типа 1 коммерческого уровня между JDBC и ODBC начиная с JVM 1.0, и они полностью совместимы с текущей JVM 1.8. Вы можете узнать больше здесь -
- Одноуровневый драйвер моста JDBC-ODBC - драйвер JDBC для источников данных ODBC
- Одноуровневый драйвер моста ODBC-JDBC - драйвер ODBC для источников данных JDBC
Я нашел разумное решение, которое позволяет использовать существующий код с изменением только для открытия логики подключения к базе данных.
UCanAccess - это драйвер JDBC с открытым исходным кодом.
http://ucanaccess.sourceforge.net/site.html
Это имеет две зависимости, одна из которых имеет еще две зависимости.
jackcess-2.0.0.jar или позже
commons-lang-2.4.jar
commons-logging-1.0.4.jar
hsqldb.jar (2.2.5)
Это все с открытым исходным кодом. Выполните поиск в Интернете, загрузите, разархивируйте, если необходимо, и поместите все четыре банки плюс один для UCanAccess в каталог в вашем проекте (например, JDBC-to-MSAccess). Если вы используете Ecplise, добавьте ваш путь сборки, выбрав в меню "Проект / Свойства / Компилятор Java / Библиотеки / Добавить внешние файлы JAR" и выберите все пять файлов JAR.
Логика подключения действительно проста:
String strConnectionString = "";
Connection conAdministrator = null;
// Register driver
Class.forName( "net.ucanaccess.jdbc.UcanaccessDriver" );
// System.getProperty( "user.dir" ) => Current working directory from where application was started
strConnectionString = "jdbc:ucanaccess://" + System.getProperty( "user.dir" ) + "\\Your-database-name.<mdb or accdb>";
// Open a connection to the database
conAdministrator = DriverManager.getConnection( strConnectionString );
Роберт Петермайер (John Petermeier) высказал хорошее мнение, что накопители H2 поддерживают ODBC через драйвер PostgreSQL, и вы можете установить драйвер соответственно по ссылке из Stackru. Настройка PostgreSQL ODBC в Windows
Я знаю, что на этот вопрос уже давным-давно ответили, но я хотел бы выделить продолжение работы с DataDirect. В этом блоге https://www.progress.com/blogs/jdbc-odbc-bridge-replacement-yields-performance-boost автор рассказывает о том, как их мост может повысить производительность на 310%. Пробную версию моста можно скачать здесь: https://www.progress.com/jdbc/sequelink