全部產品
Search
文件中心

ApsaraDB for OceanBase:SpringJDBC 串連 OceanBase 資料庫

更新時間:Jul 01, 2024

本文將介紹如何使用 Spring JDBC 架構、MySQL Connector/J 和 OceanBase 資料庫構建一個應用程式,實現基本的資料庫操作,包括建立表、插入和查詢資料等。

image.png點擊下載 spring-jdbc-mysql-client 樣本工程

前提條件

  • 您已安裝 OceanBase 資料庫並且建立了 MySQL 模式租戶。

  • 您已安裝 JDK 1.8 和 Maven。

  • 您已安裝 Eclipse。

    說明

    本文檔運行代碼使用的工具是 Eclipse IDE for Java Developers 2022-03 版本,您也可以根據個人喜好選擇適合自己的工具啟動並執行範例程式碼。

操作步驟

說明

本文中給出的操作步驟是在 Windows 環境下使用 Eclipse IDE for Java Developers 2022-03 編譯和運行該專案的步驟。如果您使用的是其他動作系統內容或編譯器,那麼操作步驟可能會略有不同。

  1. spring-jdbc-mysql-client專案匯入到 Eclipse 中。

  2. 擷取 OceanBase 資料庫 URL。

  3. 修改spring-jdbc-mysql-client專案中的資料庫連接資訊。

  4. 運行spring-jdbc-mysql-client專案。

步驟一:將 spring-jdbc-mysql-client 專案匯入到 Eclipse 中

  1. 開啟 Eclipse,在功能表列上選擇 File > Open Projects from File System

  2. 在彈出的對話方塊中,點擊 Directory 按鈕選擇專案所在的目錄,然後點擊 Finish 完成匯入。

    說明

    當使用 Eclipse 匯入 Maven 專案時,Eclipse 會自動檢測專案中的pom.xml檔案,並根據檔案中描述的依賴關係自動下載所需的依賴庫,並將它們添加到專案中。

    image.png

  3. 查看專案情況。

    image.png

步驟二:擷取 OceanBase 資料庫 URL

  1. 聯絡 OceanBase 資料庫部署人員或者管理員擷取相應的資料庫連接串。擷取串連串操作請參見 擷取串連參數

    樣本如下:

    obclient -hxxx.xxx.xxx.xxx -P3306 -ua**** -p****** -Dtest
  2. 根據 OceanBase 資料庫連接串資訊填寫下面 URL 的對應資訊。

    jdbc:mysql://$host:$port/$database_name?user=$user_name&password=$password&useSSL=false

    參數說明:

    • $hostOceanBase 資料庫連接的網域名稱。

    • $port:提供 OceanBase 資料庫連接連接埠,預設連接埠是 3306。

    • $database_name:需要訪問的資料庫名稱。

    • $user_name:提供租戶的串連賬戶。

    • $password:提供賬戶密碼。

    更多有關 MySQL Connector/J 串連屬性資訊,請參見 Configuration Properties

    樣本如下:

    jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?user=test_user001@mysql001&password=******&useSSL=false

步驟三:修改 spring-jdbc-mysql-client 專案中的資料庫連接資訊

根據步驟二:擷取 OceanBase 資料庫 URL 中擷取的資訊修改檔案spring-jdbc-mysql-client/src/main/java/com/example/Main.java中的資料庫連接資訊。

image.png

樣本如下:

  • OBServer 節點的 IP 位址為xxx.xxx.xxx.xxx

  • 訪問連接埠使用的是 3306。

  • 需要訪問的資料庫名稱為test

  • 租戶的串連賬戶是test_user001@mysql001

  • 密碼是******

代碼如下:

...
 String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useSSL=false";
 String username = "test_user001@mysql001";
 String password = "******";
...

步驟四:運行 spring-jdbc-mysql-client 專案

  1. 在專案導航器視圖中,找到並展開 src/main/java 目錄。

  2. 右鍵點擊 Main.java 檔案,然後選擇 Run As > Java Application

    image.png

  3. 在 Eclipse 的控制台視窗中來查看輸出結果。

    image.png

專案代碼介紹

點擊 spring-jdbc-mysql-client 下載專案代碼,是一個名稱為 spring-jdbc-mysql-client.zip 的壓縮包。解壓後,得到一個名為 spring-jdbc-mysql-client 的檔案夾。目錄結構如下所示:

spring-jdbc-mysql-client
├── src
│ 	└── main
│ 			└── java
│ 					└── com
│ 							└── example
│ 									└── Main.java
└── pom.xml

檔案說明:

  • src:原始碼根目錄。

  • main:主代碼目錄,包含應用程式的主要邏輯。

  • java:Java 原始碼目錄。

  • com:Java 包目錄。

  • example:樣本專案的包目錄。

  • Main.java:主類,包含建立表和插入資料等邏輯。

  • pom.xml:Maven 專案的設定檔,用於管理專案的依賴和構建設定。

pom.xml 代碼介紹

pom.xml檔案是 Maven 專案的設定檔,定義了專案的依賴項、外掛程式和構建規則等資訊。Maven 是一個 Java 專案管理工具,可以自動下載依賴項、編譯和打包專案等操作。

本文pom.xml檔案的代碼主要包括以下幾個部分:

  1. 檔案聲明語句。

    聲明本檔案是一個 XML 檔案,使用的 XML 版本是1.0,字元編碼方式是UTF-8

    代碼如下:

    <?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

    代碼如下:

    <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>指定專案的名稱為spring-jdbc-mysql-client

    3. 通過<version>專案的版本號碼為1.0-SNAPSHOT

    代碼如下:

     <groupId>com.example</groupId>
     <artifactId>spring-jdbc-mysql-client</artifactId>
     <version>1.0-SNAPSHOT</version>
  4. 設定項目源檔案的屬性。

    指定 Maven 的編譯器外掛程式為maven-compiler-plugin,並設定了原始碼和目標 Java 版本都為 8。這意味著專案的原始碼使用 Java 8 特性編寫,且編譯後的位元組碼也將相容 Java 8 運行時環境。這樣的設定可以確保專案在編譯和運行時能夠正確地處理 Java 8 的文法和特性。

    說明

    Java 1.8 和 Java 8 是同一個版本的不同命名方式。

    代碼如下:

     <build>
     <plugins>
     <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
     <source>8</source>
     <target>8</target>
     </configuration>
     </plugin>
     </plugins>
     </build>
  5. 設定項目所相依元件。

    1. 添加mysql-connector-java依賴庫,用於與資料庫進行互動:

      說明

      本部分代碼定義專案所相依元件是 MySQL Connector/J 的 V5.1.40 版本,如果需要瞭解其他版本的資訊,請參見 MySQL Connector/J

      1. 通過<groupId>指定依賴項所屬的組織為mysql

      2. 通過<artifactId>指定依賴項的名稱為mysql-connector-java

      3. 通過<version>指定依賴項的版本號碼為5.1.40

      代碼如下:

       <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.40</version>
       </dependency>
      
    2. 添加spring-jdbc依賴庫:

      1. 通過<groupId>指定依賴項所屬的組織為org.springframework

      2. 通過<artifactId>指定依賴項的名稱為spring-jdbc

      3. 通過<version>指定依賴項的版本號碼為5.2.0.RELEASE

      代碼如下:

       <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-jdbc</artifactId>
       <version>5.2.0.RELEASE</version>
       </dependency>

Main.java 代碼介紹

Main.java檔案是樣本程式的一部分,代碼示範了如何使用 Spring JDBC 架構執行資料庫操作。它首先配置了資料庫連接資訊,然後建立了一個JdbcTemplate對象來執行資料庫操作。代碼中還包括了建立表、插入資料和查詢資料的樣本。

本文Main.java檔案的代碼主要包括以下幾個部分:

  1. 定義包和匯入必要的類。

    1. 聲明當前代碼所屬的包名為com.example

    2. 匯入JdbcTemplate類,它是 Spring JDBC 架構中的核心類,用於執行資料庫操作。

    3. 匯入DriverManagerDataSource類,它是 Spring 提供的一個實現了DataSource介面的資料來源類,用於設定資料庫串連資訊。

    代碼如下:

    package com.example;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
  2. 建立一個Main類,並定義了main方法。

    1. 定義一個名為Main的公用類,作為程式的進入點。類名需要與檔案名稱保持一致。

    2. 定義一個公用靜態方法main,作為程式的起始執行點。

    3. 其他資料庫操作。

    代碼如下:

    public class Main {
     public static void main(String[] args) {
     // 資料庫連接資訊
     // 建立資料來源
     // 建立 JdbcTemplate 對象
     // 建立表
     // 插入資料
     // 更新資料
     // 刪除資料
     // 查詢資料
     // 刪除表
     }
    }
  3. 定義資料庫連接資訊。

    定義用於串連資料庫的 URL、使用者名稱和密碼。您需要將$host$port$database_name$user_name$password替換為實際的資料庫連接資訊。

    代碼如下:

     String url = "jdbc:mysql://$host:$port/$database_name?useSSL=false";
     String username = "$user_name";
     String password = "$password";

    參數解釋:

    • $hostOceanBase 資料庫連接的網域名稱。

    • $port:提供 OceanBase 資料庫連接連接埠,預設連接埠是 3306。

    • $database_name:需要訪問的資料庫名稱。

    • $user_name:提供租戶的串連賬戶。

    • $password:提供賬戶密碼。

  4. 建立資料來源。

    建立一個DriverManagerDataSource對象,並配置了資料庫連接的相關資訊,包括驅動類名、資料庫 URL、使用者名稱和密碼。具體步驟如下:

    1. 建立一個DriverManagerDataSource對象,用於設定資料庫串連的資訊。

    2. 設定驅動類名:通過調用setDriverClassName方法,設定資料庫驅動類名為com.mysql.jdbc.Driver

    3. 設定資料庫 URL:通過調用setUrl方法,設定資料庫的 URL。

    4. 設定使用者名稱:通過調用setUsername方法,設定資料庫的使用者名稱。

    5. 設定密碼:通過調用setPassword方法,設定資料庫的密碼。

    代碼如下:

     DriverManagerDataSource dataSource = new DriverManagerDataSource();
     dataSource.setDriverClassName("com.mysql.jdbc.Driver");
     dataSource.setUrl(url);
     dataSource.setUsername(username);
     dataSource.setPassword(password);
  5. 建立JdbcTemplate對象。

    建立一個JdbcTemplate對象,它是 Spring JDBC 架構的核心類之一。JdbcTemplate提供了執行資料庫操作的方法,如執行 SQL 陳述式、更新資料以及查詢資料等。

    代碼如下:

     JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  6. 建立表。

    1. 定義一個建立表的 SQL 陳述式,SQL 陳述式中指定表名為test_springjdbc,並定義了兩個列,一個是名為idINT類型列,另一個是名為nameVARCHAR(20)類型列。

    2. 執行建立表的 SQL 陳述式,jdbcTemplate對象通過調用execute方法,執行了上述定義的建立表的 SQL 陳述式。

    3. 在控制台輸出一條成功建立表的訊息。

    代碼如下:

     String createTableSql = "CREATE TABLE test_springjdbc (id INT, name VARCHAR(20))";
     jdbcTemplate.execute(createTableSql);
     System.out.println("Create table successfully.");
  7. 插入資料。

    1. 定義插入資料的 SQL 陳述式,SQL 陳述式中指定了要插入的表為test_springjdbc,列為idname,插入了兩行資料,分別是(1,'A1')(2,'A2')(3,'A3')

    2. 執行插入資料的 SQL 陳述式,jdbcTemplate對象通過調用update方法,執行了上述定義的插入資料的 SQL 陳述式。

    3. 在控制台輸出一條成功插入資料的訊息。

    代碼如下:

     String insertDataSql = "INSERT INTO test_springjdbc (id,name) VALUES (1,'A1'), (2,'A2'), (3,'A3')";
     jdbcTemplate.update(insertDataSql);
     System.out.println("Insert data successfully.");
  8. 更新資料。

    1. 定義一個 SQL 陳述式,用於更新資料庫表test_springjdbcid1的記錄的name欄位的值為A11

    2. 通過jdbcTemplate對象執行 SQL 陳述式,將更新操作應用於資料庫。

    3. 在控制台輸出一條成功更新資料的訊息。

    代碼如下:

     String updateDataSql = "UPDATE test_springjdbc SET name = 'A11' WHERE id = 1";
     jdbcTemplate.update(updateDataSql);
     System.out.println("Update data successfully.");
  9. 刪除資料。

    1. 定義一個 SQL 陳述式,用於從資料庫表test_springjdbc中刪除id2的記錄。

    2. 通過jdbcTemplate對象執行 SQL 陳述式,將刪除操作應用於資料庫。

    3. 在控制台輸出一條成功刪除資料的訊息。

    代碼如下:

     String deleteDataSql = "DELETE FROM test_springjdbc WHERE id = 2";
     jdbcTemplate.update(deleteDataSql);
     System.out.println("Delete data successfully.");
  10. 查詢資料。

    1. 定義查詢資料的 SQL 陳述式,SQL 陳述式中使用了SELECT *來選擇所有列,從test_springjdbc表中查詢資料。

    2. 執行查詢資料的SQL語句,jdbcTemplate對象通過調用query方法,執行了上述定義的查詢資料的 SQL 陳述式,並接收一個回呼函數作為參數。

    3. 回呼函數中的代碼使用ResultSet對象(rs) 擷取查詢結果中的每一行資料,並進行處理。回呼函數使用getIntgetString方法從ResultSet對象中擷取idname列的值,並將其列印到控制台。最後,回呼函數返回null

    4. 在控制台輸出一條成功查詢資料的訊息。

    代碼如下:

     String selectDataSql = "SELECT * FROM test_springjdbc";
     jdbcTemplate.query(selectDataSql, (rs, rowNum) -> {
     int id = rs.getInt("id");
     String name = rs.getString("name");
     System.out.println("id: " + id + ", name: " + name);
     return null;
     });
     System.out.println("Query data successfully.");
  11. 刪除表。

    1. 定義一個 SQL 陳述式,用於刪除資料庫中的表test_springjdbc

    2. 通過jdbcTemplate對象執行 SQL 陳述式,將刪除表的操作應用於資料庫。

    3. 輸出一條成功刪除表的訊息。

    代碼如下:

     String deleteTableSql = "DROP TABLE test_springjdbc";
     jdbcTemplate.execute(deleteTableSql);
     System.out.println("Table drop successfully.");

完整的代碼展示

pom.xml

<?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>com.example</groupId>
    <artifactId>spring-jdbc-mysql-client</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
    </dependencies>

</project>

Main.java

package com.example;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class Main {
    public static void main(String[] args) {
        // Database Connect Information
        String url = "jdbc:mysql://$host:$port/$database_name?useSSL=false";
        String username = "$user_name";
        String password = "$password";

        // create data source
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        // Create a JdbcTemplate object
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // Create table
        String createTableSql = "CREATE TABLE test_springjdbc (id INT, name VARCHAR(20))";
        jdbcTemplate.execute(createTableSql);
        System.out.println("Create table successfully.");

        // Insert data
        String insertDataSql = "INSERT INTO test_springjdbc (id,name) VALUES (1,'A1'), (2,'A2'), (3,'A3')";
        jdbcTemplate.update(insertDataSql);
        System.out.println("Insert data successfully.");

        // Update data
        String updateDataSql = "UPDATE test_springjdbc SET name = 'A11' WHERE id = 1";
        jdbcTemplate.update(updateDataSql);
        System.out.println("Update data successfully.");

        // Delete data
        String deleteDataSql = "DELETE FROM test_springjdbc WHERE id = 2";
        jdbcTemplate.update(deleteDataSql);
        System.out.println("Delete data successfully.");

        // Query data
        String selectDataSql = "SELECT * FROM test_springjdbc";
        jdbcTemplate.query(selectDataSql, (rs, rowNum) -> {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            System.out.println("id: " + id + ", name: " + name);
            return null;
        });
        System.out.println("Query data successfully.");
        
        // Delete table
        String deleteTableSql = "DROP TABLE test_springjdbc";
        jdbcTemplate.execute(deleteTableSql);
        System.out.println("Table drop successfully.");
    }
}

相關文檔

更多 MySQL Connector/J 的資訊,請參見 Overview of MySQL Connector/J