网易首页 > 网易号 > 正文 申请入驻

Linux环境下的Java(JDBC)链接openGauss数据库实践

0
分享至

测试环境

1、操作系统

CentOS操作系统官方下载地址:https://www.centos.org/download/

(Tips:目前官方版本已经到8、9)

2DataBase版本:

根据操作系统下载匹配的数据库版本和JDBC驱动包。

官方下载地址:https://opengauss.org/zh/download/ (Tips:官方最新版本3.1.0)

3JDK版本

登录网址:https://www.oracle.com/java/technologies/downloads/#java11

选择对应jdk版本下载。(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上)。

4、本实验预置环境

1)操作系统版本CentOS 7 64位(CentOS Linux release 7.6.1810)

2)DataBase&JDBC版本:

üopenGauss 2.0.1。

üJDBC驱动版本:JDBC_2.0.0

3)JDK版本Java 11.0.17

、Linux环境安装Java环境及配置步骤

1、登录到Linux环境,切换到root用户(Tips:需要root密码)


su root

2、在usr目录下建立java安装目录


cd /usrmkdir java

3、将“jdk-11.0.17_linux-x64_bin.tar.gz” 上传到 /usr/java/ 目录 。(Tips:可通过FTP或者SSH 发送到Linux系统,在通过cp命令进行复制)

4、解压jdk到当前目录,得到文件夹“jdk-11.0.17”(Tips:下载不同版本的JDK文件名不同)。


cd /usr/java/tar -zxvf jdk-11.0.17_linux-x64_bin.tar.gz

5、安装完毕可以建立一个链接以节省目录长度


ln -s /usr/java/jdk-11.0.17 /usr/jdk

6、编辑配置文件,配置环境变量


vi /etc/profile

在文本的末尾添加如下内容:


export JAVA_HOME=/usr/jdkexport CLASSPATH=$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/binexport PATH JAVA_HOME CLASSPATHcat /etc/profile

7、重启机器或执行命令


source /etc/profile


sudo shutdown -r now

8、查看安装情况


java -version

9、可能出现的错误信息:


bash: ./java: cannot execute binary file

出现这个错误的原因可能是在32位的操作系统上安装了64位的jdk,

1、查看jdk版本和Linux版本位数是否一致。

2、查看你安装的Ubuntu是32位还是64位系统:


sudo uname -mi686 //表示是32位x86_64 // 表示是64位

到此Java环境配置完成

准备链接数据库的环境

1、修改数据库的pg_hba.conf文件。

在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件

“/soft/openGauss/clusterconfig.xml”中的


cd /gaussdb/data/db1vi pg_hba.conf

将以下内容添加进pg_hba.conf文件中。(Tips:当在链接时如果提示“FATAL: Forbid remote connection with trust method!”,则需要更改目标IP对应的 客户端接入认证 将 trust 改成sha256)。

切换omm用户登陆,使用gs_ctl命令将策略生效。


su - ommgs_ctl reload -D /gaussdb/data/db1

2、连接数据库后,进入SQL命令界面。创建测试用户dbuser,密码为Gauss#3demo 。


gsql -d postgres -p 26000 -rCREATE USER dbuser IDENTIFIED BY 'Gauss#3demo';postgres=# alter role dbuser createrole createdb;ALTER ROLEpostgres=# \q

3、创建测试数据库demo。

使用gsql工具登陆数据库。登录用户为dbuser,密码为Gauss#3demo(或者为用户自定义的密码)。


gsql -d postgres -p 26000 -U dbuser –r

创建数据库demo


create database demo ENCODING 'UTF8' template = template0;\connect demo;

4、创建名为demo的schema,并设置demo为当前的schema。


CREATE SCHEMA demo;

将默认搜索路径设为demo。


SET search_path TO demo;

5、创建测试表websites。


CREATE TABLE websites (id int NOT NULL,name char(20) NOT NULL DEFAULT '',url varchar(255) NOT NULL DEFAULT '',PRIMARY KEY (id)COMMENT ON COLUMN websites.name IS '站点名称';

6、插入数据。


INSERT INTO websites VALUES('1', 'openGauss', 'https://opengauss.org/zh/'),('2', 'huaweicloud', 'https://www.huaweicloud.com/'),('3', 'openEuler', 'https://openeuler.org/zh/');

7、退出数据库


postgres=# \q

8、修改数据库监听地址。

在GS_HOME中,本实验中数据库GS_HOME设置的为/gaussdb/data/db1。


cd /gaussdb/data/db1vi postgresql.conf

将listen_addresses的值修改成为*。


listen_addresses = '*'

修改完成后重启数据库生效(-D后面的数据库默认路径,需要根据实际情况进行修改)。


gs_ctl restart -D /gaussdb/data/db1

9、将对应的JDBC驱动包 “postgresql.jar” 上传到 /soft 目录 。(Tips:可通过FTP或者SSH 发送到Linux系统,在通过cp命令进行复制)。

到此链接数据库的环境准备就绪

、链接测试

1、连接openGauss并执行java代码

1)使用Java程序连接数据库并进行查询。在/soft目录中创建openGaussDemo.java文件:


vi /soft/openGaussDemo.java

进入编辑openGaussDemo.java文件模式:


i

将如下文件内容拷贝至openGaussDemo.java文件。


import java.sql.*;public class openGaussDemo {static final String JDBC_DRIVER = "org.postgresql.Driver";static final String DB_URL = "jdbc:postgresql://192.168.52.3:26000/demo";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "dbuser";static final String PASS = "Gauss#3demo";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try{// 注册 JDBC 驱动Class.forName(JDBC_DRIVER);
// 打开链接System.out.println("连接数据库...");conn = DriverManager.getConnection(DB_URL,USER,PASS);
// 执行查询System.out.println(" 实例化Statement对象...");stmt = conn.createStatement();String sql;sql = "SELECT id, name, url FROM demo.websites";ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库while(rs.next()){// 通过字段检索int id = rs.getInt("id");String name = rs.getString("name");String url = rs.getString("url");
// 输出数据System.out.print("ID: " + id);System.out.print(", 站点名称: " + name);System.out.print(", 站点 URL: " + url);System.out.print("\n");// 完成后关闭rs.close();stmt.close();conn.close();}catch(SQLException se){// 处理 JDBC 错误se.printStackTrace();}catch(Exception e){// 处理 Class.forName 错误e.printStackTrace();}finally{// 关闭资源try{if(stmt!=null) stmt.close();}catch(SQLException se2){}// 什么都不做try{if(conn!=null) conn.close();}catch(SQLException se){se.printStackTrace();System.out.println("Goodbye!");

编辑完成后,按“ESC”键,输入:wq!保存退出。

说明:请用户根据实际情况替换红字内容,修改

jdbc:postgresql://192.168.52.3:26000/postgres中的IP信息,以及连接数据库的用户及密码USER = "dbuser"、 PASS = "Gauss#3demo" 。

2在安装Java的本机,对Java程序编译后执行。

先对Java程序进行编译(进入Java程序的目录)


javac -encoding utf-8 -cp /soft/postgresql.jar openGaussDemo.java

再执行以下命令(Tips:注意“.:”的书写)。


java -cp .:/soft/postgresql.jar openGaussDemo

3、执行结果

至此在linux环境下java访问openGauss数据库就算完成了。

五、经验小结(FAQ1、数据库运行环境建议

1)支持的硬件平台

openGauss支持运行在ARM服务器和通用的x86服务器上:

支持ARM服务器和基于x86_64的通用PC服务器。

支持本地存储(SATA、SAS、SSD)。

支持千兆、万兆Ethernet网络。

2)支持的操作系统

ARM:openEuler 20.03LTS(推荐采用此操作系统)、麒麟V10、Asianux 7.5

X86:openEuler 20.03LTS、CentOS 7.6、Asianux 7.6

2、JDBC开发应用程序的流程

3、连接故障说明

1)gsql: could not connect to server: No route to host

此问题一般是指定了不可达的地址或者端口导致的。请检查-h参数与-p参数是否添加正确。

2)gsql: FATAL: Invalid username/password,login denied.

此问题一般是输入了错误的用户名和密码导致的,请联系数据库管理员,确认用户名和密码的正确性。

3)gsql: FATAL: Forbid remote connection with trust method!

数据库由于安全问题,禁止远程登录时使用trust模式。这时需要修改pg_hba.conf里的连接认证信息。具体的设置信息请参见:官方《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节。 ——实验过程中遇到此错误tips

说明:请不要修改pg_hba.conf中openGauss主机的相关设置,否则可能导致数据库功能故障。建议业务应用部署在openGauss之外,而非openGauss内部。

4)The “libpq.so” loaded mismatch the version of gsql, please check it.

此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的,请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

5)gsql: symbol lookup error: xxx/gsql: undefined symbol: libpqVersionString

此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的(也有可能是环境中存在PostgreSQL的libpq.so),请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

6)gsql: connect to server failed: Connection timed out

Is the server running on host “xx.xxx.xxx.xxx” and accepting TCP/IP connections on port xxxx?

此问题是由于网络连接故障造成。请检查客户端与数据库服务器间的网络连接。如果发现从客户端无法PING到数据库服务器端,则说明网络连接出现故障。

7)gsql: FATAL: permission denied for database “postgres” DETAIL: User does not have CONNECT privilege.

此问题是由于用户不具备访问该数据库的权限,可以使用如下方法解决。

a.使用管理员用户dbadmin连接数据库。

gsql -d postgres -U dbadmin -p 5432

b.赋予该用户访问数据库的权限。

GRANT CONNECT ON DATABASE postgres TO user1;

8)gsql: FATAL: sorry, too many clients already,active/non-active: 197⁄3.

此问题是由于系统连接数量超过了最大连接数量。请进行会话连接数管理,释放无用会话。

会话状态可以在视图PG_STAT_ACTIVITY中查看。无用会话可以使用函数pg_terminate_backend进行释放。

select datid,pid,state from pg_stat_activity;

datid | pid | state -------+-----------------+-------- 13205 | 139834762094352 | active 13205 | 139834759993104 | idle (2 rows)

其中pid的值即为该会话的线程ID。根据线程ID结束会话。

SELECT PG_TERMINATE_BACKEND(139834759993104);

显示类似如下信息,表示结束会话成功。

PG_TERMINATE_BACKEND ---------------------- t (1 row)

9)gsql: wait xxx.xxx.xxx.xxx:xxxx timeout expired

gsql在向数据库发起连接的时候,会有5分钟超时机制,如果在这个超时时间内,数据库未能正常的对客户端请求进行校验和身份认证,那么gsql会退出当前会话的连接过程,并报出如上错误。

一般来说,此问题是由于连接时使用的-h参数及-p参数指定的连接主机及端口有误(即错误信息中的xxx部分),导致通信故障;极少数情况是网络故障导致。要排除此问题,请检查数据库的主机名及端口是否正确。

10)gsql: could not receive data from server: Connection reset by peer.

同时,检查数据库主节点日志中出现类似如下日志“ FATAL: cipher file “/data/dbnode/server.key.cipher” has group or world access”,一般是由于数据目录或部分关键文件的权限被误操作篡改导致。请参照其他正常实例下的相关文件权限,修改回来便可。

11)gsql: FATAL: GSS authentication method is not allowed because XXXX user password is not disabled.

目标数据库主节点的pg_hba.conf里配置了当前客户端IP使用”gss”方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到”sha256”后再试。配置方法见官网《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节 。

说明:

- 请不要修改pg_hba.conf中openGauss主机的相关设置,否则可能导致数据库功能故障。
- 建议业务应用部署在openGauss之外,而非openGauss内部。

以上欢迎大家测试、并交流!

本文来自 Gauss松鼠会 投稿。

Windows注册表文件为什么是"hive"?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
没有证据?那就发明证据!从中国第一“女福尔摩斯”到冤案制造者

没有证据?那就发明证据!从中国第一“女福尔摩斯”到冤案制造者

许三岁
2026-06-24 11:06:59
没有秘密的苹果,边界正在崩塌

没有秘密的苹果,边界正在崩塌

钛媒体APP
2026-07-06 08:57:15
与民同庆,挪威王储哈康昨日赛后和球迷一同“划船”庆祝

与民同庆,挪威王储哈康昨日赛后和球迷一同“划船”庆祝

懂球帝
2026-07-07 06:22:05
什么审美?看看姆巴佩的审美

什么审美?看看姆巴佩的审美

小鱼干影视
2026-07-02 09:00:09
俞敏洪抛出惊人言论:我有两个大学男同学已经死了,都是家庭条件很好,但俩人没有抵抗挫折和不幸的能力

俞敏洪抛出惊人言论:我有两个大学男同学已经死了,都是家庭条件很好,但俩人没有抵抗挫折和不幸的能力

心理观察局
2026-06-03 07:17:10
上海市国资委换帅

上海市国资委换帅

21世纪经济报道
2026-07-06 14:25:06
魏银仓设局骗走董明珠26亿跑路!蛰伏7年铁娘子逆风翻盘狂赚百亿

魏银仓设局骗走董明珠26亿跑路!蛰伏7年铁娘子逆风翻盘狂赚百亿

奇思妙想生活家
2026-07-05 09:45:31
为什么爸爸一般不支持补课,而妈妈都对补课很积极?

为什么爸爸一般不支持补课,而妈妈都对补课很积极?

育儿教育日记
2026-07-07 08:08:28
日本开始新一轮核污染水排海

日本开始新一轮核污染水排海

财联社
2026-07-06 12:08:02
广州一家三口骑电动高架侧翻遭碾压,SUV车主直呼比窦娥还冤!

广州一家三口骑电动高架侧翻遭碾压,SUV车主直呼比窦娥还冤!

刘哥谈体育
2026-07-07 04:10:08
松岛辉空夺得男单冠军,很多队友都送上祝福,唯独不见张本兄妹

松岛辉空夺得男单冠军,很多队友都送上祝福,唯独不见张本兄妹

梦忆之浅
2026-07-07 02:03:56
C罗逞强好胜不知急流勇退,名宿怒批:他就像一个步履蹒跚的老头

C罗逞强好胜不知急流勇退,名宿怒批:他就像一个步履蹒跚的老头

杨华评论
2026-07-07 08:40:47
天都塌了!今天我去车库开车,发现隔壁车位的邻居居然在黄线上焊了栏杆

天都塌了!今天我去车库开车,发现隔壁车位的邻居居然在黄线上焊了栏杆

张晓磊
2026-06-16 12:00:35
1978年,邱清泉之子邱国渭,以蚂蚁搬家方式将全家送往美国

1978年,邱清泉之子邱国渭,以蚂蚁搬家方式将全家送往美国

老谢谈史
2026-03-20 10:24:19
炸裂!女子收留19岁外甥女吃住在家,不料与丈夫发生关系还怀了孕

炸裂!女子收留19岁外甥女吃住在家,不料与丈夫发生关系还怀了孕

诗意世界
2025-07-30 18:39:13
太尴尬了!一员工因到点下班,领导在全员群公开辱骂,反遭怒怼

太尴尬了!一员工因到点下班,领导在全员群公开辱骂,反遭怒怼

火山詩话
2026-07-04 08:11:30
马筱梅逛环球影城被粉丝叫错名字,筱梅妈妈为玥儿做一件事被称赞

马筱梅逛环球影城被粉丝叫错名字,筱梅妈妈为玥儿做一件事被称赞

乡野小珥
2026-07-07 09:16:15
优必选回应仿生机器人伦理争议,股价大跌10%

优必选回应仿生机器人伦理争议,股价大跌10%

21世纪经济报道
2026-07-07 01:48:59
钟丽缇大女儿晒比基尼辣照 海边戏水秀丰腴身材太惊艳

钟丽缇大女儿晒比基尼辣照 海边戏水秀丰腴身材太惊艳

小椰的奶奶
2026-07-06 17:58:31
别吹贝林厄姆了!英格兰无名英雄一战封神,十人绝境全靠他续命

别吹贝林厄姆了!英格兰无名英雄一战封神,十人绝境全靠他续命

澜归序
2026-07-07 02:29:02
2026-07-07 13:23:00
开源中国 incentive-icons
开源中国
每天为开发者推送最新技术资讯
7840文章数 34552关注度
往期回顾 全部

科技要闻

Claude说话前 脑子里可能先亮起了这些概念

头条要闻

媒体:逼走中企后接盘工厂 美国还吹嘘新能源"复兴"了

头条要闻

媒体:逼走中企后接盘工厂 美国还吹嘘新能源"复兴"了

体育要闻

世界杯最强17岁,贝林厄姆主动和他交换球衣

娱乐要闻

司晓迪再爆鹿晗,称两人已睡过

财经要闻

百万粉丝主播的减肥“生意”

汽车要闻

试驾全新坦克300 Hi4-Z/激光雷达/全场景NOA

态度原创

本地
艺术
游戏
教育
公开课

本地新闻

国内足球之旅?这座小城给你高分答案

艺术要闻

188米!何镜堂院士出手,前海新地标不走寻常路!

最强神作《GTA6》或无缘TGA?杰夫或专门改规则

教育要闻

从“搬运”到“传承”,carry的15个短语动词助你英语表达更高级

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版