GaussDB数据库连接方式之JDBC工具连接

举报
开发者空间小蜜蜂 发表于 2024/11/22 14:11:20 2024/11/22
【摘要】 链接GaussDB数据库方式基本的有5种,分别gsql、jdbc、libpq、odbc、Psycopg驱动,本篇使用华为云上购买GaussDB505.2实例,用原生态jdbc驱动链接GaussDB并对数据库做简单的操作。

一、业务场景

链接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=>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。