Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Дружим с БД без JDBC


Автор: Рассада 25.7.2005, 10:37
Добрый день!
У меня такая задача: надо осуществить взаимодействие приложения на Java с различными СУБД (MS SQL, MySQL, Oracle) без использования JDBC. Задачу придумал не я, поэтому советы перестать валять дурака мне пока малополезны smile.
Может, есть какие-нибудь API-библиотеки фирм-производителей СУБД...
Хотя боюсь, что работа с каждой СУБД через API принесет с собой кучу хлопот

Автор: LSD 25.7.2005, 10:55
Цитата
Может, есть какие-нибудь API-библиотеки фирм-производителей СУБД...

Для Oracle есть OCI, но она рассчитана на работу с Си, а из Java придется использовать JNI.

Цитата
У меня такая задача: надо осуществить взаимодействие приложения на Java с различными СУБД (MS SQL, MySQL, Oracle) без использования JDBC.

Именно табу на JDBC, или стоит задача абстрагироваться от конкретной СУБД?

Автор: Рассада 25.7.2005, 11:13
Цитата

Для Oracle есть OCI, но она рассчитана на работу с Си, а из Java придется использовать JNI.

Разве это сохранить платформонезависимость?

Цитата

Именно табу на JDBC, или стоит задача абстрагироваться от конкретной СУБД?

Задача абстрагирования стоит давно. smile С этим пока все проблемы решаются.
А запрет связан с тем, что JDBC не обладает должной надежностью (без комментариев). В общем, как я понял, хочется им обойтись без использования высокоуровневых функций ODBC, JDBC, OLE DB...
Добавлено @ 11:20
Для MySQL нашлось что-то вот здесь: http://www.mysql.com/products/connector/j/.
Надо копнуть глубже...

Автор: LSD 25.7.2005, 11:21
Цитата
Разве это сохранить платформонезависимость?

OCI реализован для всех платформ на которых работает Oracle. Надо ли будет вносить изменения в Сишную прослойку или достаточно будет ее перекомпилировать под конкретную платформу, я не знаю. А вот Java код можно оставить без изменений. Но работать с OCI то еще удовольствие, библиотека довольно низкоуровневая.
Лучше объясни заказчику, что это весьма трудоемко, а результат может быть хуже чем с JDBC.

Автор: batigoal 25.7.2005, 14:01
Цитата
Для MySQL нашлось что-то вот здесь: http://www.mysql.com/products/connector/j/.
Надо копнуть глубже...

Это JDBC-драйвер smile

Автор: Рассада 25.7.2005, 15:15
smile . Так точно, на сайте это написано smile. Есть еще MySQL API для C++ "mysql++".
Не слишком простые пути вырисовываются по грядущей реализации...

Автор: SmaLL 25.7.2005, 16:16
Цитата
...А запрет связан с тем, что JDBC не обладает должной надежностью (без комментариев)....

Интересно, а откуда такая информация?

2All А что действительно не обладает? smile


Автор: AntonSaburov 25.7.2005, 16:25
Цитата(SmaLL @ 25.7.2005, 16:16)
А что действительно не обладает?

Да вообщем-то как любое приложение, которое использует нешифрованный TCP/IP. Весь трафик открыт.

Хотя тот же Oracle по моим сведениям поддерживает в своем драйвере возможность шифрования.

Автор: SmaLL 25.7.2005, 16:33
СдаЁтся мне что Рассада будет писать тотже JDBC драйвер только, например, с поддержкой шифрования.

Автор: AntonSaburov 25.7.2005, 16:44
Так надо предварительно посмотреть, может это в драйверах уже есть. Хотя если надо для универсальности, тогда надо делать промежуточный слой для шифрования.

Или организовать VPN внутри подсети.

Автор: Итальянец 25.7.2005, 22:58
Я так понимаю у Рассада задача написать мост альтернативный JDBC? Или ему нужно просто обеспечить более высокую надежность? Вообще-то я сомневаюсь, что с мостом у него что-то получится, по-моему гораздо легче и экономнее обеспечить надежность.

Автор: Stampede 25.7.2005, 23:37
Цитата
А запрет связан с тем, что JDBC не обладает должной надежностью


Я понимаю, что требование идет откуда-то сверху и, возможно, из кругов не сильно компетентных, но все же можно поподробнее, что именно подразумевается под "должной надежностью"? Просто слово достаточно многозначное, хотелось бы уточнить.

В любом случае, требование реализовать собственный метод доступа к БД (да еще с условием переносимости между СУБД) есть очевидная и дорогостоящая глупость. Потому что выйдет в итоге тот же JDBC - просто в силу природы взаимодействия ДБ-серверов с SQL-клиентами. Ибо цикл выполнения SQL команды - он и в африке цикл, безотносительно к тому, как называется библиотека доступа: ODBC, JDBC или Vasya Pupkin's Data Access Library smile

Автор: Рассада 26.7.2005, 09:52
Цитата
СдаЁтся мне что Рассада будет писать тотже JDBC драйвер только, например, с поддержкой шифрования.

SmaLL, мне самому так сдается smile.
Цитата
Так надо предварительно посмотреть, может это в драйверах уже есть. Хотя если надо для универсальности, тогда надо делать промежуточный слой для шифрования.

1. Точно. 2. Возможный вариант..?
Stampede, под недостаточной надежностью понимается то, о чем сказал
AntonSaburov(как я понял smile ):
Цитата
Весь трафик открыт.
.

Автор: LSD 26.7.2005, 10:17
Рассада если тебе надо шифровать трафик, то используй VPN как советовал AntonSaburov, тот же OCI не позволит сам по себе передавать шифрованные данные, только совместно с Oracle Advanced Security. Да и другие низкоуровневые интерфейсы тоже врядли смогут работать с шифрованными данными, если это в них не заложенно изначально.

А если уж никак VPN нельзя, то придется на сервере где стоит СУБД, запускать некого твоего агента, который будет соединяться с БД от имени клиента и передавать ему данные по шифрованному каналу.

Автор: hatsumeika 2.8.2005, 20:49
Если задача решается шифрованием, можно шифровать данные записываемые в БД.

Тут конечно будет полно побочных эффектов, например перестанет работать сравнение >, <. Но останется ==, !=

Еще можно исключить трафик между приложением и БД по сети посредством сервера приложений, живущего на одном компе с БД. Объекты передаваемые между клиентом и сервером можно шифровать при сериализации.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)