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

Trong bài viết này, chúng ta cùng nhau tìm hiểu về cách để kết nối cơ sở dữ liệu Oracle với jdbc trong java.Nội dung của bài viết này được cập nhật ở phần mục lục bên dưới:

Mục lục:

  1. Download JDBC driver library của Oracle
  2. URL cơ sở dữ liệu JDBC cho cơ sở dữ liệu Oracle
  3. Đăng ký trình điều khiển Oracle JDBC
  4. Thiết lập kết nối
  5. Ví dụ chương trình

Bài viết này cung cấp các ví dụ về cách thiết lập kết nối cơ sở dữ liệu với một máy chủ cơ sở dữ liệu là Oracle – bước đầu tiên để các ứng dụng Java làm việc 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 phiên bản của cơ sở dữ liệu Oracle, chẳng hạn như Oracle Database 11g Express Edition .

1. Download JDBC driver library của Oracle

Nhấp vào đây để truy cập trang tải trình điều khiển JDBC của Oracle:

download oracle jdbc driver

Chọn phiên bản trình điều khiển JDBC khớp với công cụ cơ sở dữ liệu Oracle được cài đặt trên máy tính của bạn. Ở đây chúng tôi chọn Oracle Database 11g Release 2 (11.2.0.3) đưa chúng tôi đến trang tải jar:

Như bạn thấy, có một số tệp tin jar có thể gây nhầm lẫn. Tuy nhiên, tệp jar chính là ojdbc5.jar (dành cho Java 5 hoặc mới hơn) hoặc ojdbc6.jar (dành cho Java 6 hoặc mới hơn). Ở đây chúng tôi chọn phiên bản dành cho Java 6. Nhớ chọn Accept License Agreement  ở đầu và nhấp vào liên kết ojdbc6.jar để tải xuống.

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 bạn chưa có.

Đặt tập tin ojdbc6.jar vào trong lib của dự án như bình thường như sử dụng bất kỳ tệp tin jar nào.

2. URL kết nối JDBC cho hệ quản trị cơ sở dữ liệu Oracle

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

jdbc:oracle:<drivertype>:@<database>

jdbc:oracle:<drivertype>:<user>/<password>@<database>

Điều kiện:

  • drivertype: Có thể thin, oci hoặc kprb.
  • database:Có thể ở dạng : hostname:port:SID mục nhập được liệt kê trong tệp tnsnames.ora nằm trên máy tính 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, để bạn đọc dễ hình dung tôi mô tả trong bảng sau:

Loại driver Sử dụng drivertype
Thin Driver Đối với việc sử dụng phía máy khách mà không cần cài đặt Oracle thin
OCI Driver Đối với việc sử dụng phía máy khách với cài đặt Oracle oci
Server-Side Thin Driver Tương tự như Thin Driver, nhưng chạy bên trong một máy chủ Oracle để truy cập vào một máy chủ từ xa thin
Server-Side Internal Driver Chạy bên trong máy chủ Kprb

 

Theo Oracle, nếu client JDBC của bạn và máy chủ (server) database Oracle đang chạy trên cùng một máy, bạn nên sử dụng OCI Driver vì nó nhanh hơn Driver Thin (Driver OCI có thể sử dụng Inter Process Communication – IPC, trong khi Thin Driver 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ào cơ sở dữ liệu Oracle với SID productDB thông qua cổng mặc định trên máy chủ dbHost sử dụng Thin Driver, bạn có thể xây dựng URL như sau:

String url = "jdbc:oracle:thin:tiger/scott@dbHost:1521:productDB"

Nếu sử dụng trình điều khiển OCI:

String url = "jdbc:oracle:oci:tiger/scott@localhost:1521:productDB"
String url = "jdbc:oracle:oci:tiger/scott@dbHost:1521:productDB"

3. Đăng ký trình điều khiển Oracle JDBC

JDBC driver class name 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());

hoặc là:

Class.forName("oracle.jdbc.OracleDriver");

LƯU Ý: Từ Java 6 (JDBC 4.0), đăng ký trình điều khiển rõ ràng như trên trở thành tùy chọn. Khi chúng ta đặt tập tin ojdbc6.jar trong classpath, trình điều khiển trình điều khiển JDBC có thể tự động phát hiện và nạp driver.

4. Thiết lập kết nối

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 method getConnection() của lớp DriverManager . Có ba cách sử dụng 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 để thực hiện một kết nối như sau:

Chỉ sử dụng  URL database:

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

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

Có sử dụng các driver mỏng để kết nối người dùng với hổ mật khẩu scott 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.

Sử dụng URL database, username và password

Trong phương pháp này, chúng ta truyền username và password là đố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);

Sử dụng URL database và Properties object

Trong phương pháp này, chúng tôi sử dụng một đối tượng java.util.Properties  để khai báo username, password và các thông số 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);

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

5. Ví dụ chương trình

Để chứng minh, chúng tôi tạo ra 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ập ở trên, và cuối cùng đóng tất cả các kết nối:

package com.itphutran.jdbc;
 
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.itphutran.com
 *
 */
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();
            }
        }
    }
}

TỔNG KẾT

Qua bài này, các bạn đã tìm hiểu cách để kết nối với oracle – hệ quản trị cơ sở dữ liệu với jdbc bằng nhiều cách cụ thể. Hy vọng rằng sẽ giúp các bạn trong quá trình học tập và tìm hiểu!

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
x