воскресенье, 15 апреля 2012 г.

Oracle + Java

Всем привет, это продолжение изучения оракла, и его совокупления  с другими технологиями. Сейчас его будем сабачить к Java.


Поехали.

Нащупываем на затылке кнопочку включения мозгов, и рвёмся в бой.
Пока масажное приспособление нежно разминает мою спинку, я буду описывать ваши(наши) действия. Надёюсь вы знаете как выглядят 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

Всё готово. Успехов вам в использовании баз данных.






Комментариев нет:

Отправить комментарий