![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Гость_junior |
|
|||
Unregistered |
Я еще новичок, и поэтому задаю этот вопрос.
Скажите, как получить доступ из приложения к базе на Оракле 9i. Какой драйвер и как использовать? |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
JDBC драйвер Оракла, конечно. Использовать его так же, как это делается обычно. Код нужен? Он такой же, как и для любой другой базы.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Гость_junior |
|
|||
Unregistered |
Если не сложно, то да! а то я никак не могу разобраться.
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Ну, если без деталей, то так (драйвер можно качнуть на сайте Оракла):
Сейчас просто времени нет расписывать, извини ![]() Загляни в документацию JDBC. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
igon |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
Вот "выдержки" из рабочей программы
-------------------- Хотите поговорить об этом? |
|||
|
||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Я люблю делать всё короче. Например, Connection использую неявно, а драйвер оставляю возможность передавать параметром по этому импортировать внутри кода:
Это сообщение отредактировал(а) Се ля ви - 4.5.2005, 00:02 -------------------- |
|||
|
||||
Гость_junior |
|
||||
Unregistered |
Спасибо, но все равно не понятно.
Во-первых, где можно взять документацию по jdbc понятную? Во-вторых, что за пакеты:
В-третьих, тут используется мост JDBC-ODBC:
И последнее, у меня Oracle9iAS стоит, я так понимаю там есть сам JDBC драйвер. Что мне с ним вообще делать? Куда копировать? Как вообще все это происходит. Расскажите, пожалуйста, по-подробнее. Или ссылочку киньте8) Спасибо |
||||
|
|||||
Се ля ви |
|
||||||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Гость_junior
зарегистрируйся, пожалуйста ![]()
На сайте SUN`а, например - http://java.sun.com/products/jdbc/index.jsp. В книжке ещё можно, в т.ч. и в электронной. Вообще, JDBC - это часть J2EE, соответственно поройся в ссылках на описание технологий J2EE.
Очевидно, драйверы.
угу
Копируй его в то место, где он будет доступен для твоей JRE - вот и всё. Например, в директорию \jre\lib\ext После этого перегружай сервер или что там у тебя Java использует - и вперёд, с песней ![]() -------------------- |
||||||||
|
|||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это Oralce-овская реализация классов java.sql.Connection java.sql.Driver. Кстати Oralce поставляет 2 типа драйверов thin и oci. В примерах что были используется thin. Для своей работы он требует только jar с драйверами. oci драйвер требует установленного клиента и использует информацию из tsnames.ora, и чуток побыстрее (при массовом insert он у меня оказался быстрее на 5%). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Stampede |
|
||||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 24 Всего: 144 |
Предупреждение начинающим: Се ля ви приводит очень неудачный пример организации кода. Использовать его в качестве шаблона для своих программ очень не рекомендуется. Почему - сейчас объясню.
Немножко путанно, но если имеется в виду возмржность смены СУБД/дравера через конфигурацию, то в приведенного фрагмента кода этого как раз не происходит, а напротив, мы видим "зашитые" в код и имя драйвера, и строку соединения.
Тоже ничего хорошего. Что мы видим? Переменная типа Connection объявлена как приватная и типа инкапсулирована, и мы ее не видим и не слышим и знать про нее не хотим, а рассматриваем класс как объект, который знает, как получить какие-то определенные данные. Мысль понятная, но не все на самом деле так просто. Раз у нас есть такой вот класс-"посредник к данным" (data-aware class), то должны быть каким-то образом продуманы вопросы, связанные с жизненным циклом его коннекции, а иначе есть возможность заполучить в будущем разного рода неприятности в виде бесконтрольного роста числа соединений (и исчерпание в конце концов их лимита), незакрытих коннекций, неправильно инициализированных коннекций и т. д. Для этого нужно, чтобы или коннекция была доступна извне, или чтобы класс позволял в явном виде выполнять:
Более того, в любом мало-мальски серъезном приложении ты хочешь иметь полный контроль за тем, чтобы все действия по доступу к данным, которые относятся к одной логической операции, выполнялись в рамках одной транзакции. Поэтому таким методам, как приведенный метод method(), лучше использовать внешнюю коннекцию, передаваемую как параметр. Ну и я уж не говорю о том, что такой метод не имеет права глотать исключения, а должен отфутболивать их вверх по инстанции. Резюмируя, что мы имеем? Мы имеем класс, где в одну кучу навалены вещи, которые при хорошем дизайне должны быть четко разделены: - Выделение коннекций Которое должно быть, во-первых, конфигурируемым, а во-вторых иметь достаточно абстрактный интерфейс, чтобы при случае его можно было заменить на механизм пула соединений или механизм получения через JNDI или бог знает какой еще механизм вы захотите подтыкнуть. Ну не надо зашивать эти вещи в код utility-класса! - Выполнение действий по доступу к данным Сама по себе идея неплохая - сгруппировать различные SQL команда в одном классе, но это годится только для небольших приложений, где количество различных запросов находится в обозримых пределах. Даже если идти по такому пути, нужно не забывать еще несколько вещей: по возможности использовать PreparedStatement вместо Statement, использовать внешниюю коннекцию, не ловить исключения. - Управление жЫзненым циклом коннекций Ну про метод finally() я вообще молчу. Очевидно, имелось в виду автоматическое закрытие коннекции при уничтожении объекта. Для этого служит метод finalize(), но использовать его для управления жизненным циклом таких нежных ресурсов как датабазные коннекции - идея не очень хорошая. Почему - могу объяснить. Потом. Общий вывод: не используйте этот пример как руководство к действию Се ля ви, чур, без обид - сам напросился ![]() |
||||||
|
|||||||
Гость_junior |
|
|||
Unregistered |
Ок, огромное спасибо. Пойду разбираться в столь исчерпывающей информации. Спасибо всем, если появятся вопросы, то обязательно задам.
А у меня тут первая проблемка, копирую архив с классами от Оракла в указанную директорию
компилятор грит, что КлассНотФоунд. Копирую в директорию, указанную в переменной Класспатх - то же самое. А вот копирую в ту же директорию где и программка, то все ок. Почему так? Спасибо |
|||
|
||||
Се ля ви |
|
||||||||||||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Дык я тут каак раз и привёл код для замены. Просто строку запроса к драйверу меняем на параметр, читаемый из конфига - и загружается нужный драйвер ![]() ![]() Насчёт остального - не вижу особенного криминала в том, что я не сохраняю специально ссылку на объект connection - как раз наоборот, ИМХО, в больших программах от большого количества перемменных можно запутаться, а сам объект connection, соответствующий данному statement`у легко получить, вызвав его метод stmt.getConnection(), что я и проделывал в конце кода, когда коннекшн нужно закрыть. Т.е. от того, что я не сохранил ссылку, объект я никуда не потерял и если нужен, могу ссылку на него легко получить. ![]() Впрочем это всё ИМХО. Так легче персонально мне, и я вовсе не пытаюсь тут кому-то чего-то навязывать. Каждый делает как проще именно ему. Я вот не люблю огромного количества переменных, по-этому люблю их использовать неявно и вытаскивать когда нужно. Я могу понять, если кому-то это удобней, чем помнить, как что когда откуда вытаскивать.
Имено по-этому в конце - stmt.getConnection().close(); ![]()
Ну это я уже просто так поставил - на самом деле от специфики задачи зависит то, как будут исключения обрабатываться. Что мне по-твоему нужно было в типовом примере написать?
Да, совсэм забыл, ща поправлю... Stampede вообще, многовато требований к типовому примеру у тебя, не находишь? Ну да, вместо finalize() можно использовать шаблон Singleton, или другие иинтересности, но это уже не для начинающих будет уж точно, а человеку бы в этом разобраться суметь - и то ладно... Это потом уж можно дальше копать, если интерес не отпадёт!.. P.S. Хотя действительно, соглашусь, что начинающим такой пример лучше не использовать - человек должен сам придти к такой простоте кода, иначе не будет а) её ценить б) понимать по-другому организованный код других программистов. P.P.S.
Да ладно, коли по делу, так не жалко... ![]() ![]() Добавлено @ 00:11
Попробуй винду перезагрузить, может JRE старая не закрылась?.. Должен работать вариант с \jre\lib\ext - проверено неоднократно.
Для этого перегрузка не нужна - он первым делом классы нужные ищет в директории твоей программы. Но вообще-то в маломальски-крупном проекте используются пакеты и там такой трюк не пройдёт... А у тебя не может несколько JRE стоять?.. Тогда ты, может быть, не в ту суёшь? Например, в средах разработки типа JBuilder`а, IDEA и Eclipse - свои собственные JRE. Можешь, конечно, использовать драйвер как библиотеку, но это не даст тебе его именно конфигурить, например из сервера... Это сообщение отредактировал(а) Се ля ви - 4.5.2005, 00:35 -------------------- |
||||||||||||||
|
|||||||||||||||
batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Объясни сейчас, плз ![]()
Умоляю... соединение! ![]() -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
Гость_junior |
|
|||
Unregistered |
у меня стоит NetBeans IDE 3.6 и jre там своего нету...по-моему. стоит так же j2sdk1.4.2_04 в jre директорию которого я и кидал классы Оракла. Так значит на переменную Classpath никакой завязки нет? спасибо |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Просто многие IDE, похоже, подменяют classpath на свое значение. Не знаю, как с этим у NetBeans. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |