Всем привет, это продолжение изучения оракла, и его совокупления с другими технологиями. Сейчас его будем сабачить к Java.
Поехали.
Нащупываем на затылке кнопочку включения мозгов, и рвёмся в бой.
Пока масажное приспособление нежно разминает мою спинку, я буду описывать ваши(наши) действия. Надёюсь вы знаете как выглядят java пограммы.
АГА, тяжелый молот судьбы ударил по вашим амбициям? А почему? Не подумали? Давайте разбираться. Начиная с первой строчки. Мы загружаем драйвер оракла. А где мы его достанем? Для этого нужно подключить в программу jar file драйвера ojdbc6 . Есть 4 способа:
1) Указание в параметре classpath пути к этому драйверу -classpath /home/alex/NetBeansProjects/DbApp/ojdbc6.jar
2) Указание в глобальной переменной CLASSPATH пути к этому драйверу export CLASSPATH=/home/alex/NetBeansProjects/DbApp/ojdbc6.jar
Оба способа рабочие, но оба заменяют ВСЕ подключаемые библиотеки при компиляции, включая саму программу исходник, поэтому нужно ещё указать и программу исходник в этих переменных , или текущую папку PWD.
3) Написание файла манифеста, но я им ещё не пользовался.
4) Программировать в среде разработки, там подключение библиотек делается 3 кликами.
В моём случае( я использовал 1 способ) команды компиляции и выполнения выглядели так:
ORA-12705: Cannot access NLS data files or invalid environment specified
Неприятно,неприятно. Но вполне разрешаемо. Многие способы я рассматривал в этом посте . Способ с netbeans не проканает,даже если вы в нём. java к нему не имеет никакого отношения. Но сейчас я открою вам новый секретный способ, который я считаю единственным истинно правильным.
Дополним программу:
Ну, подставляем другую щеку, компилируем и запускаем.
Что , опять огребли по самые помидоры? Но проблема теперь в запросе select. Дело в том, что executeQuery поддерживает выполнение 1 sql запроса, а значит, никаких точек с запятой там быть не может. Решение: убираем точку с запятой, крестимся, запускаем. ResultSet rset = stmt.executeQuery("select * from NLS_DATABASE_PARAMETERS"); И в долгожданном выводе получаем настройки национальных локалей вашей БД. А ведь что мы сделали? Мы выполнили запрос в базу и получили ответ. Дальше вы можете составлять свои более сложные таблицы, более сложные программы. И во всё работать с базами данных, Если у кого не получилось из обрывков кода склепать готовую программу, то вот она.
Читать дальше......
Поехали.
Нащупываем на затылке кнопочку включения мозгов, и рвёмся в бой.
Пока масажное приспособление нежно разминает мою спинку, я буду описывать ваши(наши) действия. Надёюсь вы знаете как выглядят java пограммы.
public class HelloDB { public static void main(String[] args) { System.out.println("Hello DB"); } }Запишем это в файлик HelloDB.java , вызовем javac HelloDB.java . А потом java HelloDB . И любуемся плодами своей тяжкой работы. Порадовались? Двигаемся дальше. Подключится java к базе - очень легко. Всего-то стоит
Class.forName("oracle.jdbc.driver.OracleDriver"); System.out.println("Driver Loaded"); DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521","system","oracle"); Statement stmt = conn.createStatement();Ну что сложно,нет? Тогда включите сервер базы данных и запускайте.
АГА, тяжелый молот судьбы ударил по вашим амбициям? А почему? Не подумали? Давайте разбираться. Начиная с первой строчки. Мы загружаем драйвер оракла. А где мы его достанем? Для этого нужно подключить в программу jar file драйвера ojdbc6 . Есть 4 способа:
1) Указание в параметре classpath пути к этому драйверу -classpath /home/alex/NetBeansProjects/DbApp/ojdbc6.jar
2) Указание в глобальной переменной CLASSPATH пути к этому драйверу export CLASSPATH=/home/alex/NetBeansProjects/DbApp/ojdbc6.jar
Оба способа рабочие, но оба заменяют ВСЕ подключаемые библиотеки при компиляции, включая саму программу исходник, поэтому нужно ещё указать и программу исходник в этих переменных , или текущую папку PWD.
3) Написание файла манифеста, но я им ещё не пользовался.
4) Программировать в среде разработки, там подключение библиотек делается 3 кликами.
В моём случае( я использовал 1 способ) команды компиляции и выполнения выглядели так:
javac -classpath /home/alex/NetBeansProjects/DbApp/ojdbc6.jar:$PWD DBApp.java java -classpath /home/alex/NetBeansProjects/DbApp/ojdbc6.jar:$PWD DBAppДавайте чуть дополним программу, и запустим. Дополним этими строками. Это получение результатов выполнения SQL запросов в базу,и вывод на экран.
ResultSet rset = stmt.executeQuery("select * from NLS_DATABASE_PARAMETERS;"); while ( rset.next() ) System.out.print(rset.getString(1).concat(" : ") +rset.getString(2)+ "\n"); stmt.close();Запускайте.Что? Опять ваша система даёт вам по щам? Но зато ошибка уже знакома.
ORA-12705: Cannot access NLS data files or invalid environment specified
Неприятно,неприятно. Но вполне разрешаемо. Многие способы я рассматривал в этом посте . Способ с netbeans не проканает,даже если вы в нём. java к нему не имеет никакого отношения. Но сейчас я открою вам новый секретный способ, который я считаю единственным истинно правильным.
Дополним программу:
Locale l = Locale.getDefault(); Locale.setDefault(Locale.US); ........ Locale.setDefault(l);Как видите, я сохраняю текушую локаль системы. Устанавливаю английский, а по завершении программы, возвращаю ту, что была.
Ну, подставляем другую щеку, компилируем и запускаем.
Что , опять огребли по самые помидоры? Но проблема теперь в запросе select. Дело в том, что executeQuery поддерживает выполнение 1 sql запроса, а значит, никаких точек с запятой там быть не может. Решение: убираем точку с запятой, крестимся, запускаем. ResultSet rset = stmt.executeQuery("select * from NLS_DATABASE_PARAMETERS"); И в долгожданном выводе получаем настройки национальных локалей вашей БД. А ведь что мы сделали? Мы выполнили запрос в базу и получили ответ. Дальше вы можете составлять свои более сложные таблицы, более сложные программы. И во всё работать с базами данных, Если у кого не получилось из обрывков кода склепать готовую программу, то вот она.
import java.sql.*; import java.util.Locale; public class DBApp { public static void main(String[] args) throws SQLException,ClassNotFoundException { /* Class.forName ("oracle.jdbc.driver.OracleDriver"); System.out.println("Driver Loaded"); */ Locale l = Locale.getDefault(); Locale.setDefault(Locale.US); DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//192.168.56.101:1521","system","oracle"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select * from NLS_DATABASE_PARAMETERS"); while ( rset.next() ) System.out.print(rset.getString(1).concat(" : ") rset.getString(2) "\n"); stmt.close(); Locale.setDefault(l); } }И запуск
javac -classpath /home/alex/NetBeansProjects/DbApp/ojdbc6.jar:$PWD DBApp.java java -classpath /home/alex/NetBeansProjects/DbApp/ojdbc6.jar:$PWD DBAppВсё готово. Успехов вам в использовании баз данных.