---
title: "MySQL Connector/J 连接 OceanBase 数据库示例程序 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: MySQL Connector/J 连接 OceanBase 数据库示例程序 OceanBase 数据库支持通过 MySQL 官方 JDBC 驱动连接。本文介绍了如何通过 MySQL Connector/J 连接并使用 OceanBase 数据库。 点击下载 mysql-connector/j 示例工程 前提条件 您…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# MySQL Connector/J 连接 OceanBase 数据库示例程序

更新时间：2026-03-02 11:17:20

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/300.develop/100.application-development-of-mysql-mode/200.sample-program-of-mysql-mode/100.java-of-mysql-mode/1400.connect-to-the-oceanbase-database-through-mysql-connectorJ-of-mysql-mode.md)  

OceanBase 数据库支持通过 MySQL 官方 JDBC 驱动连接。本文介绍了如何通过 MySQL Connector/J 连接并使用 OceanBase 数据库。

 [![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.0/3.develop/demo22x22.png) 点击下载 mysql-connector/j 示例工程](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.3.0/develop/demo/java/mysql-connector-j/JDBCDemo.zip)  

## 前提条件

- 您已下载并安装 [IntelliJ IDEA](https://www.jetbrains.com/zh-cn/idea/)。
 - 您已下载 JDK 1.8.0。
 - 您已下载并在 IntelliJ IDEA 中配置 [Maven](https://maven.apache.org/download.cgi)。
 - 您已下载本文所使用的工程示例代码。

## 版本兼容性

| MySQL Connector/J 版本 | 推荐版本 | 说明 |
| --- | --- | --- |
| 5.x | 5.1.40 ~ 5.1.49 | 稳定版本 |
| 8.x | 8.0.7 ~ 8.0.25, 8.2.0 ~ 8.4.0 | 新特性支持 |

## 功能特性

- 支持标准的 JDBC API
 - 提供连接池管理
 - 支持 SSL 连接
 - 支持批量操作
 - 支持预处理语句

### 安装后检查

1. 检查 JDK 是否安装成功：

   ```shell
   java -version

   ```
 2. 检查 Maven 是否安装成功：

   ```shell
   mvn -version

   ```
 3. (可选)检查 IntelliJ IDEA 中配置 Maven 是否正确：

   本文仅提供简单的示例工程供您参考。如果您需要尝试开发更为复杂的示例，可以下载适合您开发环境版本的 Maven，并通过如下路径，在 IntelliJ IDEA 中完成配置。

      1. 检查 Maven 是否安装成功：

        ```
      2. 打开 IntelliJ IDEA，点击 **IntelliJ IDEA** > **Settings** > **Build,Execution,Development** > **Build Tools** > **Maven**，在 **Maven home path** 配置 **Maven** 安装包所在路径。

   ![Setting Maven](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.3.0/develop/sample-program/maven-settings.png)

## 操作步骤

1. 获取 OceanBase 数据库连接信息。
 2. 修改您已下载的工程示例代码。
 3. 运行工程示例代码。

## 创建 Java 应用程序

### 步骤一：获取数据库连接串

联系 OceanBase 数据库部署人员或者管理员获取相应的数据库连接串，例如：

```shell
obclient -h$host -P$port -u$user_name -p$password -D$database_name

```

**参数说明：**

- `$host`：提供 OceanBase 数据库连接 IP。OceanBase 数据库代理（OceanBase Database Proxy，ODP）连接方式使用的是一个 ODP 地址；直连方式使用的是 OBServer 节点的 IP 地址。
 - `$port`：提供 OceanBase 数据库连接端口。ODP 连接的方式默认是 `2883`，在部署 ODP 时可自定义；直连方式默认是 `2881`，在部署 OceanBase 数据库时可自定义。
 - `$database_name`：需要访问的数据库名称。

  #### 注意

  连接租户的用户需要拥有该数据库的 `CREATE`、`INSERT`、`DROP` 和 `SELECT` 权限。更多有关用户权限的信息，请参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479241)。
 - `$user_name`：提供租户的连接账户。ODP 连接的常用格式：`用户名@租户名#集群名` 或者 `集群名:租户名:用户名`；直连方式格式：`用户名@租户名`。
 - `$password`：提供账户密码。

更多连接串的信息，请参见 [通过 OBClient 连接 OceanBase 租户](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476088)。

**示例如下：**

```shell
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest

```

### 步骤二：修改工程示例代码

1. 解压已下载好的工程示例。
 2. 打开 [IntelliJ IDEA](https://www.jetbrains.com/zh-cn/idea/)，点击 **File** > **Open**，添加工程示例文件。
 3. 根据步骤一中获取的连接串信息，修改工程代码 **JDBCDemo > src > main > java > JDBCTest** 文件中如下数据库连接参数。

   修改代码中的数据库连接参数。参考如下字段及拼接方法，对应的值，则取自步骤一获取的数据库连接串。

   ```java
   connection = DriverManager.getConnection("jdbc:mysql://{host}:{port}/{dbname}?user={username}&password={******}")

   //示例
   jdbc:mysql://100.88.xx.xx:2881/test?user=r***&password=******`

   ```

      - **host**：取自 `-h` 参数，OceanBase 数据库连接地址，有时候是 ODP 地址。
      - **port**：取自 `-P` 参数，OceanBase 数据库连接端口，也是 ODP 的监听端口。
      - **dbname**：取自 `-D` 参数，需要访问的数据库名称。
      - **username**：取自 `-u` 参数，租户的连接用户名，格式为 **用户@租户#集群名称**，集群的默认租户是 'sys'，租户的默认管理员用户是 'root'。直连数据库时不填写集群名称，通过 ODP 连接时需要填写。
      - **password**：取自 `-p` 参数，用户密码。

   修改后代码段示例如下：

   ```java
   //示例
   Connection connection = DriverManager.getConnection("jdbc:mysql://100.88.xx.xx:2881/test?user=r***&password=******");

   ```

   #### 注意

   若使用 MySQL Connector/J 8.x，账号密码中需避免包含 `#`，否则会导致示例工程运行报错。

在正确安装 MySQL Connector/J 5.1.47 驱动并配置环境之后，可以通过以下 `Test.java` 文件的示例代码进行数据库连接及使用。

#### 注意

如果是 MySQL Connector/J 8.x 版本，`Class.forName("com.mysql.jdbc.Driver")` 中的 `com.mysql.jdbc.Driver` 需要替换成 `com.mysql.cj.jdbc.Driver`。

完整代码示例如下：

```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTest {

    public static void main(String[] args) {
        try {
            //load driver
            Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
//            Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8

            //create connection
            Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:2881/test?user=r***&password=");
            System.out.println("jdbc version : " + connection.getMetaData().getDriverVersion());
            Statement stmt = connection.createStatement();

            //create table
            stmt.execute("drop table if exists test");
            stmt.execute("create table test (id int, name varchar(25))");
            System.out.println("create table successfully");

            //insert data
            stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
            System.out.println("insert data successfully");

            //query data
            System.out.println("query data : ");
            ResultSet rs = stmt.executeQuery("select * from test");
            while (rs.next()) {
                System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
            }

            //update data
            stmt.execute("update test set name = 'bbb' where id = 1");
            System.out.println("update data successfully");

            //query data after update
            System.out.println("query data after update : ");
            rs = stmt.executeQuery("select * from test");
            while (rs.next()) {
                System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
            }

            //delete data
            stmt.execute("delete from test where id = 1");
            System.out.println("delete data successfully");

            //query data after delete
            System.out.println("query data after delete : ");
            rs = stmt.executeQuery("select * from test");
            while (rs.next()) {
                System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
            }

            //drop table
            stmt.execute("drop table test");
            //close
            rs.close();
            stmt.close();
            connection.close();
        } catch (Exception e) {
            System.out.println("error!");
            e.printStackTrace();
        }
    }
}

```

### 步骤三：运行应用程序

在 IntelliJ IDEA 中运行示例工程。若返回如下结果，说明数据库连接成功，示例工程执行正确。

 ![connect-j-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/cloud/OBCloud-240420/Integrations/Connector-J/connector-j.png)

## 项目代码介绍

点击 [mysql-connector/j](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.3.0/develop/demo/java/mysql-connector-j/JDBCDemo.zip) 下载项目代码，是一个名称为 `JDBCDemo.zip` 的压缩包。

解压后，得到一个名为 `JDBCDemo` 的文件夹。目录结构如下所示：

```shell
JDBCDemo
├── src
│   └── main
│       └── java
│           └── JDBCTest.java
└── pom.xml

```

**文件说明：**

- `src`：源代码根目录。
 - `main`：主代码目录，包含应用程序的主要逻辑。
 - `java`：Java 源代码目录。
 - `JDBCTest.java`：主类，包含创建表和插入数据等逻辑。
 - `pom.xml`：Maven 项目的配置文件，用于管理项目的依赖和构建设置。

### pom.xml 代码介绍

`pom.xml` 文件是 Maven 项目的配置文件，定义了项目的依赖项、插件和构建规则等信息。Maven 是一个 Java 项目管理工具，可以自动下载依赖项、编译和打包项目等操作。

本文 `pom.xml` 文件的代码主要包括以下几个部分：

1. 文件声明语句。

   声明本文件是一个 XML 文件，使用的 XML 版本是 `1.0`，字符编码方式是 `UTF-8`。

   **代码如下：**

   ```java
   <?xml version="1.0" encoding="UTF-8"?>

   ```
 2. 配置 POM 的命名空间和 POM 模型版本。

      1. 通过 `xmlns` 指定 POM 的命名空间为 `http://maven.apache.org/POM/4.0.0`。
      2. 通过 `xmlns:xsi` 指定 XML 命名空间 `http://www.w3.org/2001/XMLSchema-instance`。
      3. 通过 `xsi:schemaLocation` 指定 POM 的命名空间为 `http://maven.apache.org/POM/4.0.0` 和 POM 的 XSD 文件的位置为 `http://maven.apache.org/xsd/maven-4.0.0.xsd`。
      4. 通过 `<modelVersion>` 元素指定了该 POM 文件使用的 POM 模型版本为 `4.0.0`。

   **代码如下：**

   ```java
   <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>

    <!-- 其他配置 -->

   </project>

   ```
 3. 配置基本信息。

      1. 通过 `<groupId>` 指定项目所属组织为 `com.example`。
      2. 通过 `<artifactId>` 指定项目的名称为 `JDBCDemo`。
      3. 通过 `<version>` 项目的版本号为 `1.0-SNAPSHOT`。

   **代码如下：**

   ```java
       <groupId>org.example</groupId>
       <artifactId>JDBCDemo</artifactId>
       <version>1.0-SNAPSHOT</version>

   ```
 4. 配置项目所依赖组件。

      1. 添加 `mysql-connector-java` 依赖库，用于与数据库进行交互：

        #### 说明

        本部分代码定义项目所依赖组件是 MySQL Connector/J 的 V5.1.40 版本，如果需要了解其他版本的信息，请参见 [MySQL Connector/J](https://downloads.mysql.com/archives/c-j/)。

             1. 通过 `<groupId>` 指定依赖项所属的组织为 `mysql`。
             2. 通过 `<artifactId>` 指定依赖项的名称为 `mysql-connector-java`。
             3. 通过 `<version>` 指定依赖项的版本号为 `5.1.40`。

        **代码如下：**

        ```java
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.40</version>
                </dependency>

        ```

### JDBCTest.java 代码介绍

`JDBCTest.java` 文件是示例程序的一部分，代码演示了如何使用 MySQL Connector/J执行数据库操作。它首先配置了数据库连接信息，然后创建了一个 `JDBCTest` 对象来执行数据库操作。代码中还包括了创建表、插入数据和查询数据的示例。

本文 `JDBCTest.java` 文件的代码主要包括以下几个部分：

1. 导入 Java 程序中使用 JDBC API 需要的 Java 类。

      1. Connection 用于建立与数据库之间的连接。
      2. DriverManager 负责管理一组 JDBC 驱动程序。
      3. ResultSet 用于处理 SQL 查询返回的数据。
      4. Statement 用于执行静态 SQL 语句并返回结果。

   **代码如下：**

   ```
 2. 创建一个 `JDBCTest` 类，并定义了 `main` 方法。

      1. 定义一个名为 `JDBCTest` 的公共类，作为程序的入口点。类名需要与文件名保持一致。
      2. 定义一个公共静态方法 `main`，作为程序的起始执行点。
      3. 其他数据库操作。

   **代码如下：**

   ```java
   public class Main {
       public static void main(String[] args) {
           // 数据库连接信息
           // 创建数据源
           // 创建表
           // 插入数据
           // 更新数据
           // 删除数据
       }
   }

   ```
 3. 定义数据库连接信息。

      1. `Class.forName()` 来加载并注册 MySQL JDBC 驱动程序。
      2. `DriverManager.getConnection()` 方法定义用于连接数据库的 URL、用户名和密码。您需要将 `$host`、`$port`、`$database_name`、`$user_name` 和 `$password` 替换为实际的数据库连接信息。

   **代码如下：**

   ```java
       Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
       //Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8
       Connection connection = DriverManager.getConnection("jdbc:mysql://xx.xxx.xxx.xxx:2881/test?user=test@tt1&password=test");

   ```

   **参数解释：**

      - `$host`：提供 OceanBase 数据库连接 IP。ODP 连接方式使用的是一个 ODP 地址；直连方式使用的是 OBServer 节点的 IP 地址。
      - `$port`：提供 OceanBase 数据库连接端口。ODP 连接的方式默认是 `2883`，在部署 ODP 时可自定义；直连方式默认是 `2881`，在部署 OceanBase 数据库时可自定义。
      - `$database_name`：需要访问的数据库名称。
      - `$user_name`：提供租户的连接账户。ODP 连接的常用格式：`用户名@租户名#集群名` 或者 `集群名:租户名:用户名`；直连方式格式：`用户名@租户名`。
      - `$password`：提供账户密码。
 4. 创建和执行 SQL 声明。

   ```java
       Statement stmt = connection.createStatement();
       stmt.execute("...");

   ```
 5. 创建表。

   **代码如下：**

   ```java
       // 用 SQL 语句删除如果存在名为 "test" 的表
       stmt.execute("drop table if exists test");
       // 创建一个新的名为 "test" 的表，包含两个字段：整型的 "id" 和字符型的 "name"
       stmt.execute("create table test (id int, name varchar(25))");
               // 打印创建表成功的消息
       System.out.println("create table successfully");

   ```
 6. 插入数据。

   **代码如下：**

   ```java
       // 在 "test" 表中插入两行数据
       stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
       // 打印插入数据成功的消息
       System.out.println("insert data successfully");

   ```
 7. 查询数据。

   **代码如下：**

   ```java
       // 打印查询数据的消息
       System.out.println("query data : ");
       // 执行查询 SQL 语句，获取 "test" 表中的所有数据
       ResultSet rs = stmt.executeQuery("select * from test");
       // 遍历结果集
       while (rs.next()) {
       // 打印每条数据的 "id" 和 "name" 字段
       System.out.println(rs.getString("id") + "\t" + rs.getString("name"));

   ```
 8. 更新数据。

   **代码如下：**

   ```java
       // 更新 "test" 表中 id 为 1 的记录的 "name" 字段为 'bbb'
       stmt.execute("update test set name = 'bbb' where id = 1");
       // 打印更新数据成功的消息
       System.out.println("update data successfully");

   ```
 9. 删除数据。

   **代码如下：**

   ```java
       // 删除 "test" 表
       stmt.execute("drop table test");
       // 关闭结果集、语句和数据库连接
       rs.close();
       stmt.close();
       connection.close();

   ```
 10. 异常处理。

    执行以上数据库操作的过程中发生任何异常，这些异常将被捕捉，并打印错误信息以及堆栈跟踪详情。

    **代码如下：**

    ```java
        } catch (Exception e) {
        System.out.println("error!");
        e.printStackTrace();
        }

    ```

### 完整的代码展示

    pom.xml   Main.java

```java
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>JDBCDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>com.mysql</groupId>-->
        <!--            <artifactId>mysql-connector-j</artifactId>-->
        <!--            <version>8.0.33</version>-->
        <!--        </dependency>-->
    </dependencies>
</project>

```

            //create connection
            Connection connection = DriverManager.getConnection("jdbc:mysql://{host}:{port}/{dbname}?user={username}&password={******}");
            System.out.println("jdbc version : " + connection.getMetaData().getDriverVersion());
            Statement stmt = connection.createStatement();

```

## 最佳实践

### 批量操作

使用批处理提高性能：

```java
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO test VALUES (?, ?)");
for (int i = 0; i < 1000; i++) {
    pstmt.setInt(1, i);
    pstmt.setString(2, "name" + i);
    pstmt.addBatch();
}
pstmt.executeBatch();

```

### 预处理语句

使用预处理语句防止 SQL 注入：

```java
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM test WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();

```

## 常见问题

### 1. 连接超时

配置连接超时参数：

```java
jdbc:mysql://host:port/database?connectTimeout=30000&socketTimeout=60000

```

### 2. 字符集问题

设置正确的字符集：

```java
jdbc:mysql://host:port/database?characterEncoding=utf8&useUnicode=true

```

### 3. SSL 连接

启用 SSL 连接：

```java
jdbc:mysql://host:port/database?useSSL=true&requireSSL=true

```

### 4. 账号密码中的特殊字符

如果账号密码中包含特殊字符（如 #），需要进行 URL 编码：

```java
String encodedPassword = URLEncoder.encode(password, "UTF-8");

```

#### 注意

使用 MySQL Connector/J 8.x 版本时，账号密码中需避免包含 `#` 字符，否则可能导致连接失败。

## 更多信息

创建 Java 示例应用程序在 OceanBase 数据库开源社区中也有相关的完整示例，详情请参考 [Java 示例应用程序](https://github.com/oceanbase/ob-samples/tree/master/java/mysql-connector-java)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
