杰瑞科技汇

Java JDBC连接Oracle数据库,配置步骤有哪些?

目录

  1. 准备工作
    • 安装 JDK
    • 安装 Oracle 数据库
    • 下载 Oracle JDBC 驱动
    • 准备数据库信息
  2. 核心步骤与代码示例
    • 步骤 1: 加载 JDBC 驱动
    • 步骤 2: 建立数据库连接
    • 步骤 3: 创建 StatementPreparedStatement
    • 步骤 4: 执行 SQL 查询
    • 步骤 5: 处理结果集
    • 步骤 6: 关闭资源
  3. 完整代码示例
    • 示例 1: 查询数据 (使用 PreparedStatement)
    • 示例 2: 插入数据 (使用 PreparedStatement)
  4. 最佳实践
    • 使用 try-with-resources (推荐)
    • 使用连接池
    • 处理异常
    • 防止 SQL 注入
  5. 常见问题与解决方案
    • ClassNotFoundException
    • SQLException: No suitable driver found
    • ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

准备工作

在编写代码之前,请确保您已经完成了以下准备工作。

a. 安装 JDK

确保您的系统已安装 Java Development Kit (JDK),并且配置了 JAVA_HOME 环境变量,您可以通过 java -versionjavac -version 命令来验证。

b. 安装 Oracle 数据库

确保您有一个正在运行的 Oracle 数据库实例(Oracle Express Edition - XE),并且已经创建了一个用户和表。

Java JDBC连接Oracle数据库,配置步骤有哪些?-图1

我们创建一个测试用户 testuser 和密码 password,并创建一个 employees 表:

-- 连接到 SYS 或 SYSTEM 用户,创建新用户
CREATE USER testuser IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO testuser;
-- 切换到新用户,创建表
-- conn testuser/password
CREATE TABLE employees (
    id          NUMBER PRIMARY KEY,
    name        VARCHAR2(100),
    email       VARCHAR2(100),
    salary      NUMBER(10, 2)
);
-- 插入一些测试数据
INSERT INTO employees (id, name, email, salary) VALUES (1, '张三', 'zhangsan@example.com', 8000);
INSERT INTO employees (id, name, email, salary) VALUES (2, '李四', 'lisi@example.com', 9500);
COMMIT;

c. 下载 Oracle JDBC 驱动

您需要 Oracle 提供的 JDBC 驱动程序,最常用的是 Thin Driver,这是一个纯 Java 驱动,无需客户端库。

  1. 访问 Oracle 官网下载页面:Oracle JDBC Driver Downloads
  2. 根据您的 Oracle 数据库版本选择对应的驱动,对于 Oracle 19c,您可以下载 "ojdbc8.jar" (JDK 8) 或 "ojdbc10.jar" (JDK 10+)。
  3. 下载后,将 .jar 文件添加到您的 Java 项目的类路径中。

如何添加到类路径 (以 IntelliJ IDEA 为例):

Java JDBC连接Oracle数据库,配置步骤有哪些?-图2

  1. 右键点击您的项目 -> Open Module Settings
  2. 导航到 Libraries -> 点击 号 -> Java
  3. 找到并选择您下载的 ojdbcX.jar 文件,点击 OK

d. 准备数据库连接信息

您需要以下信息来连接数据库:

  • URL: 格式为 jdbc:oracle:thin:@<host>:<port>:<service_name>
    • host: 数据库服务器的 IP 地址或主机名 (localhost)。
    • port: 数据库监听的端口号 (默认为 1521)。
    • service_name: 数据库的服务名 (SID 已逐渐被弃用,推荐使用 Service Name),您可以通过 SQL 查询 SELECT value FROM v$parameter WHERE name = 'service_names' 来获取。
  • User: 您的数据库用户名 (testuser)。
  • Password: 您的数据库密码 (password)。

示例 URL: jdbc:oracle:thin:@localhost:1521:ORCLPDB1 (这是一个典型的 Oracle PDB 服务名)


核心步骤与代码示例

以下是使用 JDBC 连接 Oracle 数据库的六个核心步骤。

Java JDBC连接Oracle数据库,配置步骤有哪些?-图3

步骤 1: 加载 JDBC 驱动

虽然对于 JDBC 4.0 (JDK 6+) 及以上版本,驱动通常会自动加载,但显式加载是更健壮的做法。

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

步骤 2: 建立数据库连接

使用 DriverManagergetConnection() 方法,传入 URL、用户名和密码。

String url = "jdbc:oracle:thin:@localhost:1521:ORCLPDB1";
String user = "testuser";
String password = "password";
Connection conn = DriverManager.getConnection(url, user, password);

步骤 3: 创建 StatementPreparedStatement

  • Statement: 用于执行静态 SQL 语句。注意: 容易引发 SQL 注入,不推荐直接使用。
  • PreparedStatement: 用于执行预编译的 SQL 语句。强烈推荐使用,因为它可以防止 SQL 注入,并且对于重复执行的 SQL 有性能优势。
// 推荐:使用 PreparedStatement
String sql = "SELECT id, name, email, salary FROM employees WHERE salary > ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setDouble(1, 8500.0); // 设置第一个 ? 的值

步骤 4: 执行 SQL 查询

  • 对于 SELECT 查询,使用 executeQuery() 方法,它返回一个 ResultSet 对象。
  • 对于 INSERT, UPDATE, DELETE 等操作,使用 executeUpdate() 方法,它返回一个整数,表示受影响的行数。
// 执行查询
ResultSet rs = pstmt.executeQuery();

步骤 5: 处理结果集

使用 while 循环遍历 ResultSet,并通过 getXXX() 方法(如 getInt(), getString(), getDouble())获取数据。

while (rs.next()) {
    // 通过列名获取数据,更具可读性且不易出错
    int id = rs.getInt("id");
    String name = rs.getString("name");
    String email = rs.getString("email");
    double salary = rs.getDouble("salary");
    System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email + ", Salary: " + salary);
}

步骤 6: 关闭资源

为了防止资源泄漏,必须按创建的逆序关闭所有 JDBC 对象:ResultSet -> Statement/PreparedStatement -> Connection

rs.close();
pstmt.close();
conn.close();

完整代码示例

示例 1: 查询数据 (使用 PreparedStatement)

这个示例查询薪资高于 8500 的员工。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class OracleJdbcQueryExample {
    public static void main(String[] args) {
        // 数据库连接信息
        String dbUrl = "jdbc:oracle:thin:@localhost:1521:ORCLPDB1";
        String dbUser = "testuser";
        String dbPassword = "password";
        // SQL 查询语句
        String sql = "SELECT id, name, email, salary FROM employees WHERE salary > ?";
        // 使用 try-with-resources 自动管理资源 (推荐)
        try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            // 设置查询参数
            pstmt.setDouble(1, 8500.0);
            // 执行查询
            try (ResultSet rs = pstmt.executeQuery()) {
                System.out.println("薪资高于 8500 的员工:");
                System.out.println("----------------------------------");
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String email = rs.getString("email");
                    double salary = rs.getDouble("salary");
                    System.out.printf("ID: %d, Name: %s, Email: %s, Salary: %.2f%n", id, name, email, salary);
                }
            }
        } catch (SQLException e) {
            System.err.println("

分享:
扫描分享到社交APP
上一篇
下一篇