#java #oracle
#java #Oracle
Вопрос:
Какой был бы наилучший способ найти oracle home и tnsnames.ora из java? На самом деле я пытаюсь получить список записей tns и отобразить его в выпадающем списке программы.
Ответ №1:
Здесь нет какого-то автоматического поиска. Если вы хотите, чтобы драйвер Oracle JDBC использовал ваши имена tns, вам необходимо определить системное свойство (-D) oracle.net.tns_admin=<directory where tnsnames.ora is located>
. Я рекомендую настроить его так, чтобы вы могли им пользоваться и ojdbc
тоже будете им пользоваться (при необходимости)
Комментарии:
1.
oracle.net.tns_admin
Работает ли, если задано во время выполнения с помощьюSystem.setProperty
или требуется, чтобы параметр был установлен при запуске приложения?2. Чтобы вы могли его использовать, вам просто нужно убедиться, что он настроен, прежде чем он вам понадобится. OJDBC, я полагаю, нуждается в нем в некотором
static
инициализаторе, и чтобы быть доступным для него, вы должны убедиться, что он настроен перед загрузкой классов ojdbc (но это сложно, поэтому безопаснее всего поместить его в командную строку — вам это нужно, если вы хотите использовать tnsnames для подключений oracle)3. Прямо перед
Class.forName()
тогда недостаточно рано? Естественно, все становится еще сложнее, когда вводятся фреймворки для обработки драйверов и подключений.
Ответ №2:
tnsnames.ora находится в ORACLE_HOME/network/admin
. Код будет:
String oracleHome = System.getenv("ORACLE_HOME");
if(oracleHome != null){
String tnsFilename = oracleHome File.separatorChar
"network" File.separatorChar
"admin" File.separatorChar
"tnsnames.ora";
}
Ответ №3:
Если вы ORACLE_HOME
установили в качестве переменной envinroment, то вы можете использовать System.getenv("ORACLE_HOME");
для доступа к ней.
Смотрите javadoc.