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)