oracle-java

Java kết nối với cơ sở dữ liệu Oracle qua JDBC

Hướng dẫn JDBC này giúp bạn viết mã Java để thiết lập kết nối cơ sở dữ liệu với máy chủ cơ sở dữ liệu Oracle – bước đầu tiên để các ứng dụng Java hoạt động với một trong những hệ thống cơ sở dữ liệu phổ biến nhất. Giả sử bạn đã cài đặt một phiên bản cơ sở dữ liệu Oracle, chẳng hạn như Oracle Database Express Edition.

Download JDBC driver library for Oracle database

Để thực hiện một chương trình Java nói chuyện với cơ sở dữ liệu Oracle, chúng ta cần có trình điều khiển Oracle JDBC (OJDBC) trong classpath. Nhấp vào đây để truy cập trang tải xuống trình điều khiển JDBC của Oracle. Sau đó chọn phiên bản trình điều khiển JDBC phù hợp với máy chủ cơ sở dữ liệu Oracle và JDK được cài đặt trên máy tính của bạn. Hiện tại có hai phiên bản chính của OJDBC:

– OJDBC 8: certified with JDK 8, for Oracle database 11g and 12c.

– OJDBC 10: certified with JDK 10, for Oracle database 18c and 19c.

LƯU Ý: Oracle yêu cầu người dùng phải có tài khoản Oracle để tải xuống, vì vậy bạn có thể phải đăng ký tài khoản nếu chưa có.

Giải nén tệp lưu trữ đã tải xuống và đặt tệp ojdbc10.jar dưới đường dẫn classpath của dự án của bạn như bình thường như sử dụng bất kỳ tệp jar nào.

<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc8</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>d:/Path/To/Oracle/JDBC/ojdbc8.jar</systemPath> </dependency>
Code language: HTML, XML (xml)

JDBC database URL for Oracle database

Cú pháp của URL cơ sở dữ liệu cho cơ sở dữ liệu Oracle như sau:

jdbc:oracle:<drivertype>:@<database> jdbc:oracle:<drivertype>:<user>/<password>@<database>
Code language: HTML, XML (xml)

Trong đó

  • drivertype có thể là thin, oci hoặc kprb.
  • database có thể ở dạng tên máy chủ: cổng: SID hoặc một mục TNSNAMES được liệt kê trong tệp tnsnames.ora nằm trên máy khách. Cổng mặc định là 1521.

Oracle phân loại trình điều khiển JDBC của họ thành bốn loại khác nhau, như được mô tả trong bảng sau:

Driver typeUsagedrivertype
Thin DriverĐể sử dụng phía máy khách mà không cần cài đặt Oraclethin
OCI DriverĐể sử dụng phía máy khách với cài đặt Oracleoci
Server-Side Thin DriverTương tự như Thin Driver, nhưng chạy bên trong máy chủ Oracle để truy cập máy chủ từ xathin
Server-Side Internal DriverChạy bên trong máy chủ mục tiêukprb

Theo Oracle, nếu máy khách JDBC của bạn và máy chủ cơ sở dữ liệu Oracle đang chạy trên cùng một máy, bạn nên sử dụng Trình điều khiển OCI vì nó nhanh hơn nhiều so với Trình điều khiển mỏng (Trình điều khiển OCI có thể sử dụng Giao tiếp liên quá trình – IPC, trong khi Trình điều khiển mỏng chỉ có thể sử dụng kết nối mạng).

Ví dụ: nếu bạn muốn kết nối người dùng tiger với mật khẩu scott với cơ sở dữ liệu Oracle với SID productDB thông qua cổng mặc định trên máy chủ dbHost bằng cách sử dụng Trình điều khiển mỏng, bạn có thể tạo URL như sau:

String url = “jdbc:oracle:thin:tiger/scott@dbHost:1521:productDB”
Code language: JavaScript (javascript)

Nếu sử dụng  OCI Driver:

String url = “jdbc:oracle:oci:tiger/scott@localhost:1521:productDB” String url = “jdbc:oracle:oci:tiger/scott@dbHost:1521:productDB”
Code language: JavaScript (javascript)

Nếu bạn có mục nhập TNSNAMES productionDB trong tệp tnsnames.ora, bạn có thể tạo URL như sau:

String url = “jdbc:oracle:oci:@productionDB”
Code language: JavaScript (javascript)

Đối với Trình điều khiển mỏng phía máy chủ, hãy sử dụng cùng một URL với Trình điều khiển mỏng.

Đối với Trình điều khiển nội bộ phía máy chủ, hãy sử dụng các URL sau:

String url = "jdbc:oracle:kprb:" String url = "jdbc:default:connection:"
Code language: JavaScript (javascript)

Bởi vì trong môi trường đó, trình điều khiển thực sự chạy trong một phiên mặc định và máy khách luôn được kết nối nên kết nối sẽ không bao giờ bị đóng.

Register Oracle JDBC driver

Tên lớp trình điều khiển Oracle JDBC là oracle.jdbc.OracleDriver.Bạn có thể đăng ký trình điều khiển này như sau:

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
Code language: CSS (css)

Hoặc là

Class.forName("oracle.jdbc.OracleDriver");
Code language: CSS (css)

LƯU Ý: Kể từ Java 6 (JDBC 4.0), việc đăng ký trình điều khiển một cách rõ ràng như trên trở thành tùy chọn. Miễn là chúng tôi đặt tệp ojdbc10.jar trong classpath, trình quản lý trình điều khiển JDBC có thể phát hiện và tải trình điều khiển tự động.

Establish connection to Oracle database

Với JDBC, chúng ta có thể thiết lập kết nối cơ sở dữ liệu bằng cách gọi phương thức getConnection () của lớp DriverManager. Có ba phiên bản của phương pháp này:

  • static Connection getConnection(String url)
  • static Connection getConnection(String url, Properties info)
  • static Connection getConnection(String url, String user, String password)

Vì vậy, chúng ta có thể có ba cách để tạo kết nối như sau:

Using only database URL for everything

Trong phương pháp này, chúng tôi chỉ định tất cả các thuộc tính kết nối trong một chuỗi URL, ví dụ:

String dbURL = "jdbc:oracle:thin:tiger/scott@localhost:1521:productDB"; Connection conn = DriverManager.getConnection(dbURL); if (conn != null) { System.out.println("Connected"); }
Code language: JavaScript (javascript)

Điều đó sử dụng Trình điều khiển mỏng để kết nối hổ người dùng với mật khẩu scott với cơ sở dữ liệu SID productDB chạy trên cùng một máy thông qua cổng mặc định 1521.

Using database URL, username and password

Trong phương pháp này, chúng tôi chuyển tên người dùng và mật khẩu làm đối số bổ sung cho phương thức getConnetion (), ví dụ:

String dbURL = "jdbc:oracle:thin:@localhost:1521:productDB"; String username = "tiger"; String password = "scott"; Connection conn = DriverManager.getConnection(dbURL, username, password);
Code language: JavaScript (javascript)

Using database URL and Properties object

Trong phương pháp này, chúng tôi sử dụng đối tượng java.util.Properties để giữ tên người dùng, mật khẩu và các thuộc tính bổ sung khác. Ví dụ:

String dbURL = "jdbc:oracle:oci:@ProductDB"; Properties properties = new Properties(); properties.put("user", "scott"); properties.put("password", "tiger"); properties.put("defaultRowPrefetch", "20"); Connection conn = DriverManager.getConnection(dbURL, properties);
Code language: JavaScript (javascript)

Trong ví dụ này, chúng tôi đang sử dụng Trình điều khiển OCI với mục TNSNAMES ProductDB và chỉ định một thuộc tính bổ sung defaultRowPrefetch là số hàng cần tìm nạp trước từ máy chủ.

Java Connect to Oracle Database Example program

Để chứng minh, tôi tạo một chương trình ví dụ nhỏ dưới đây thiết lập ba kết nối khác nhau theo 3 cách được đề cập ở trên và cuối cùng đóng tất cả các kết nối:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /** * This program demonstrates how to make database connection with Oracle * database server. * @author www.codejava.net * */ public class JdbcOracleConnection { public static void main(String[] args) { Connection conn1 = null; Connection conn2 = null; Connection conn3 = null; try { // registers Oracle JDBC driver - though this is no longer required // since JDBC 4.0, but added here for backward compatibility Class.forName("oracle.jdbc.OracleDriver"); // METHOD #1 String dbURL1 = "jdbc:oracle:thin:tiger/scott@localhost:1521:productDB"; conn1 = DriverManager.getConnection(dbURL1); if (conn1 != null) { System.out.println("Connected with connection #1"); } // METHOD #2 String dbURL2 = "jdbc:oracle:thin:@localhost:1521:productDB"; String username = "tiger"; String password = "scott"; conn2 = DriverManager.getConnection(dbURL2, username, password); if (conn2 != null) { System.out.println("Connected with connection #2"); } // METHOD #3 String dbURL3 = "jdbc:oracle:oci:@ProductDB"; Properties properties = new Properties(); properties.put("user", "tiger"); properties.put("password", "scott"); properties.put("defaultRowPrefetch", "20"); conn3 = DriverManager.getConnection(dbURL3, properties); if (conn3 != null) { System.out.println("Connected with connection #3"); } } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } finally { try { if (conn1 != null && !conn1.isClosed()) { conn1.close(); } if (conn2 != null && !conn2.isClosed()) { conn2.close(); } if (conn3 != null && !conn3.isClosed()) { conn3.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } }
Code language: JavaScript (javascript)

Trên đây là cách Java kết nối với cơ sở dữ liệu Oracle qua JDBC. Chúc bạn thực hành tốt.

Bài viết liên quan

Leave a Reply

Your email address will not be published.