GaussDB数据库连接方式之JDBC工具连接
一、业务场景
链接GaussDB数据库方式基本的有5种,分别gsql、jdbc、libpq、odbc、Psycopg驱动,本篇使用华为云上购买GaussDB505.2实例,用原生态jdbc驱动链接GaussDB并对数据库做简单的操作。
二、 前提条件
- 华为云上GaussDB实例已购买并正常运行;
- 支持的jdk版本为1.7版本以上,本实例在麒麟SP1系统上已安装jdk1.8版本来演示。
三、JDBC驱动包获取
场景1:在华为云上JDK驱动下载,此场景使用在华为云上购买GaussDB实例,根据创建的云数据库引擎版本,下载对应的驱动包,包名为GaussDB_driver.zip。
| 版本 | 下载地址 | 
| V2.0-8.x | |
| V2.0-3.x | |
| V2.0-2.x | 
场景2:在support网站上下载HCS轻量化的GaussDB,根据下载的DBS_GaussDB-Server包来获取jdbc驱动。
如:下载505.1 GaussDB版本为例:

说明:
从发布包中获取。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Jdbc.tar.gz。解压后jdbc的驱动jar包。
- gaussdbjdbc.jar:主类名为“com.huawei.gaussdb.jdbc.Driver”,数据库连接的url前缀为“jdbc:gaussdb”,推荐使用此驱动包。本章的Java代码示例默认使用gaussdbjdbc.jar包。
- gscejdbc.jar:主类名为“com.huawei.gaussdb.jdbc.Driver”,数据库连接的url前缀为“jdbc:gaussdb”,此驱动包打包了密态数据库需要加载的加解密相关的依赖库,密态场景推荐使用此驱动包。目前仅支持EulerOS操作系统。
- gaussdbjdbc-JRE7.jar:主类名为“com.huawei.gaussdb.jdbc.Driver”,数据库连接的url前缀为“jdbc:gaussdb”,在JDK1.7环境使用gaussdbjdbc-JRE7.jar包。
本实例为了演示使用gaussdbjdbc.jar链接数据库,采用场景1获取此jar包。解压GaussDB_driver.zip。
[root@ecs-jdbc-test driver]# unzip GaussDB_driver.zip
[root@ecs-jdbc-test driver]# tree
├── GaussDB_driver
│   ├── Centralized
│   │   ├── Euler2.5_X86_64
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gds.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Go.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gsql.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Jdbc.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Libpq.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Odbc.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Python.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│   │   │   └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│   │   ├── Euler2.9_arm_64
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gds.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Go.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gsql.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Jdbc.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Libpq.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Odbc.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Python.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│   │   │   └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│   │   ├── Kylinv10_arm_64
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gds.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Go.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gsql.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Jdbc.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Libpq.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Odbc.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Python.tar.gz
│   │   │   ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│   │   │   └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│   │   └── Kylinv10_X86_64
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gds.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Go.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gsql.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Jdbc.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Libpq.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Odbc.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Python.tar.gz
│   │       ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│   │       └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│   └── Distributed
│       ├── Euler2.5_X86_64
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gds.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Go.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gsql.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Jdbc.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Libpq.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Odbc.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Python.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│       │   └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│       ├── Euler2.9_arm_64
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gds.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Go.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Gsql.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Jdbc.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Libpq.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Odbc.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Euler_64bit_Python.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│       │   └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│       ├── Kylinv10_arm_64
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gds.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Go.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gsql.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Jdbc.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Libpq.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Odbc.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Python.tar.gz
│       │   ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│       │   └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
│       └── Kylinv10_X86_64
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gds.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Go.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Gsql.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Jdbc.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Libpq.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Odbc.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Kylin_64bit_Python.tar.gz
│           ├── GaussDB-Kernel_505.2.0_Windows_X64_Odbc.tar.gz
│           └── GaussDB-Kernel_505.2.0_Windows_X86_Odbc.tar.gz
└── GaussDB_driver.zip
 [root@ecs-jdbc-test driver]#本实例演示场景1情景,根据创建的云数据库引擎版本,下载对应的驱动包,所以我们按场景选择GaussDB-Kernel_505.2.0_Euler_64bit_Jdbc.tar.gz
[root@ecs-jdbc-test driver]# tar -zxvf GaussDB-Kernel_505.2.0_Euler_64bit_Jdbc.tar.gz -C ./jdbc/
[root@ecs-jdbc-test driver]# cd jdbc/
[root@ecs-jdbc-test jdbc]# ls -al
total 11800
drwx------ 2 root  root     4096 Nov 21 10:51 .
drwx------ 4 root  root     4096 Nov 21 10:51 ..
-rw-r--r-- 1 20001 20001 1265677 Sep 16 02:05 gaussdbjdbc.jar
-rw-r--r-- 1 20001 20001 1379111 Sep 16 02:05 gaussdbjdbc-JRE7.jar
-rw-r--r-- 1 20001 20001 5631915 Sep 16 02:05 gscejdbc.jar
-rw-r--r-- 1 20001 20001 1267931 Sep 16 02:05 gsjdbc200.jar
-rw-r--r-- 1 20001 20001 1248671 Sep 16 02:05 gsjdbc4.jar
-rw-r--r-- 1 20001 20001 1269077 Sep 16 02:05 opengaussjdbc.jar
-rw-r--r-- 1 20001 20001      34 Sep 16 02:05 VERSION
[root@ecs-jdbc-test jdbc]#四、JDBC连接华云为数据库进行操作
步骤 1 确认一下华为云购买实例的目标库相关信息,如目标库IP地址,端口号,库名,模式、用户与密码。本演示目标库信息以下:
目标库IP地址:xxx.xxx.x.xxx
端口号:****
库名:dtest
模式:dtest
用户:dtest
密码:******
步骤 2 验证jdk是否安装成功
root@ecs-jdbc-test jdk1.8.0_341]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)步骤 3 编写一个jdbc连接GaussDB的测试代码,如:java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBTest{
   //创建数据库连接。
   public static Connection GetConnection(String username, String passwd) {
     String driver = "com.huawei.gaussdb.jdbc.Driver";
     String sourceURL = "jdbc:gaussdb://xxx.xx.x.xxx:****/dtest?CurrentSchema=dtest";
     Connection conn = null;
     try {
       //加载数据库驱动。
       Class.forName(driver).newInstance();
     } catch (Exception e) {
       e.printStackTrace();
       return null;
     }
     try {
       //创建数据库连接。
       conn = DriverManager.getConnection(sourceURL, username, passwd);
       System.out.println("Connection succeed!");
     } catch (Exception e) {
       e.printStackTrace();
       return null;
     }
     return conn;
}
//执行普通SQL语句,创建jdbc_test1表。
   public static void CreateTable(Connection conn) {
     Statement stmt = null;
     try {
       stmt = conn.createStatement();
       
       Runtime.getRuntime().addShutdownHook(new ExitHandler(stmt));
       //执行普通SQL语句。
       int rc2 = stmt
          .executeUpdate("DROP TABLE if exists jdbc_test1;");
       int rc1 = stmt
          .executeUpdate("CREATE TABLE jdbc_test1(col1 INTEGER, col2 VARCHAR(10));");
       stmt.close();
     } catch (SQLException e) {
       if (stmt != null) {
         try {
           stmt.close();
         } catch (SQLException e1) {
           e1.printStackTrace();
         }
       }
       e.printStackTrace();
     }
   }
   //执行预处理语句,批量插入数据。
   public static void BatchInsertData(Connection conn) {
     PreparedStatement pst = null;
     try {
       //生成预处理语句。
       pst = conn.prepareStatement("INSERT INTO jdbc_test1 VALUES (?,?)");
       for (int i = 0; i < 2000; i++) {
        //添加参数。
         pst.setInt(1, i);
         pst.setString(2, "data " + i);
         pst.addBatch();
       }
       //执行批处理。
       pst.executeBatch();
       pst.close();
     } catch (SQLException e) {
       if (pst != null) {
         try {
           pst.close();
         } catch (SQLException e1) {
         e1.printStackTrace();
         }
       }
       e.printStackTrace();
     }
   }
   /**
    * 主程序,逐步调用各静态方法。
    * @param args
    * @throws InterruptedException 
    */
   public static void main(String[] args) throws InterruptedException {
     //创建数据库连接。
     Connection conn = GetConnection("dtest", "xxxxx");
    //创建表。
     CreateTable(conn);
     //批量插入数据。
     BatchInsertData(conn);
     try {
       conn.close();
     } catch (SQLException e) {
       e.printStackTrace();
     }
   }
 }
步骤 4 使用jdk编译java
[root@ecs-jdbc-test jdbc]# javac -d . DBTest.java步骤 5 执行java程序
[root@ecs-jdbc-test jdbc]# java -cp /driver/jdbc/gaussdbjdbc.jar:. DBTest
Nov 21, 2024 11:50:20 AM com.huawei.gaussdb.jdbc.core.v3.ConnectionFactoryImpl openConnectionImpl
INFO: [627b8f0f-0596-4cf8-945a-867e2191b713] Try to connect. IP: 192.168.0.86:8000.
Nov 21, 2024 11:50:21 AM com.huawei.gaussdb.jdbc.core.v3.ConnectionFactoryImpl openConnectionImpl
INFO: [xxx.xxx.xx.xxx:xxxxx/ xxx.xxx.xx.xxx:xxxxx] Connection is established. ID: 627b8f0f-0596-4cf8-945a-867e2191b713.
Nov 21, 2024 11:50:21 AM com.huawei.gaussdb.jdbc.core.v3.ConnectionFactoryImpl openConnectionImpl
INFO: Connect complete. ID: 627b8f0f-0596-4cf8-945a-867e2191b713.
Connection succeed!步骤 6 登入相同区域ESC服务器,使用gsql工具链接目标库验证写入数据
[root@ecs-jdbc-test ~]# cd /opt/
[root@ecs-jdbc-test opt]# source gsql_env.sh
Configuring LD_LIBRARY_PATH, PATH for gsql ... .............. done
All things done.
[root@ecs-jdbc-test opt]# gsql -h xxx.xxx.x.xxx -p **** -d **** -U dtest -W '*****' -ar
gsql ((GaussDB Kernel 505.2.0 build f3142317) compiled at 2024-09-16 02:05:50 commit 9967 last mr 19883 release)
SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.
dtest=> set search_path=dtest;
SET
dtest=> SELECT count(*) as cn FROM jdbc_test1;
  cn
------
 2000
(1 row)
dtest=>- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)