Для того чтобы подключиться к СУБД и выполнить запрос, необходимо написать код для выполнения следующих действий:
1. Import Packages
2. Register the JDBC Drivers
3. Open a Connection to a Database
4. Create a Statement Object
5. Execute a Query and Return a Result Set Object
6. Process the Result Set
7. Close the Result Set and Statement Objects
8. Make Changes to the Database
9. Commit Changes
10. Close the Connection
Шаг 1.
import java.sql.*; // стандартный пакет JDBC
import oracle.jdbc.driver.*; // расширение JDBC для Oracle import oracle.sql.*; // особенности языка SQL для Oracle
Необходимо переменной classpath указать положение драйвера JDBC ([ORACLE_HOME\jdbs\lib\zip-классы]). Сделать это можно 2
способами:
1. через переменную среды окружения
2. при компиляции и запуске указать ключ javac -classpath ".; ORACLE_HOME\jdbs\lib\classes12.zip; ORACLE_HOME\jdbs\lib\nls_charset12.zip"
Шаг 2.
Данная операция осуществляется вызовом статического метода:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Шаг 3.
Для открытие соединения вызывается метод getConnection() класса DriverManager, возвращающий объект типа Connection.
getConnection(String URL, String user, String password); Строка URL выглядит следующим образом:
jdbc:oracle:<drivertype>:@<database>.
Например,
DriverManager.getConnection ("jdbc:oracle:thin:@myhost:1521:orcl", "scott", "tiger");
или
DriverManager.getConnection("jdbc:oracle:oci8:@(description=(address=(host=myhost)(protocol=tcp)(port=1521)(connect_data=(sid=orcl)))","scott","tiger");
Connection conn = DriverManager.getConnection
("jdbc:oracle:oci8:@mics", "stud01", "stud01");
Шаг 4.
Создание объекта Statement для описания запроса используется метод createStatement класса соединения
Statement stmt = conn.createStatement();
Шаг 5.
Для выполнения запроса к БД используется метод executeQuery класса Statement. Полученный резульат возвращается в переменную класса ResultSet, которую в дальнейшем необходимо обработать.
ResultSet rset = stmt.executeQuery ("SELECT ename FROM emp");
Шаг 6.
После получения данных в переменную ResultSet необходимо вызывать метод next() для построчного доступа к данным до тех пор, пока не будет достигнут конец данных.
Для извлечения данных используется метод getXXX() класса ResultSet, где
XXX – предопределенный тип Java.
while (rset.next())
System.out.println (rset.getString(1));
Шаг 7.
Необходимо после использования явно закрывать экземпляры типов Statement и ResultSet вызовом метода close().
Драйвер не содержит метод finalizer(), поэтому очистка памяти происходит при вызове close().
Если переменная rset имеет тип ResultSet, а stmt – Statement, то
rset.close();
stmt.close();
Шаг 8.
Для записи данных в базу через операции Insert или Update используется класс PreparedStatement. Объект данного класса позволяет выполнить выражение с переменным числом входных параметров.
Для подстановки значений в выражение PreparedStatement используется метод setXXX() класса PreparedStatement.
Например,
PreparedStatement pstmt =conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (?,?)");
// Add LESLIE as employee number 1500
pstmt.setInt (1, 1500); // The first? is for EMPNO
pstmt.setString (2, "LESLIE"); // The second? is for ENAME
Do the insertion pstmt.execute ();
Шаг 9.
По умолчанию, операции DML (Insert, Update, Delete) фиксируются автоматически после их выполнения. Для отключения такого режима используется команда conn.setAutoCommit(false);
Если автоматический режим отключен, то необходимо вручную выполнять операции commit и rollback:
conn.commit() или conn.rollback()
Неявный commit всегда срабатывает при разрыве соединения или выполнении функций DDL.
Шаг 10.
После завершения работы необходимо закрыть соединение conn.close()
Рассмотрим пример соединения с СУБД Oracle
import java.sql.*; import java.io.*; import java.awt.*; class JdbcTest {
public static void main (String args []) throws SQLException { // Load Oracle driver
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@myhost:1521:ORCL","scott", "tiger"); // Query the employee names
Statement stmt = conn.createStatement ();
ResultSet rset = stmt.executeQuery ("SELECT ename FROM emp");
while (rset.next ())
System.out.println (rset.getString (1));
//close the result set, statement, and the connection
rset.close(); stmt.close(); conn.close();
}}