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

目录
  • 一、测试环境:
    • 本实验预置环境
  • 二、Linux环境安装Java环境及配置步骤
  • 三、准备链接数据库的环境
  • 四、连接测试
  • 五、经验小结(FAQ)

一、测试环境:

本实验预置环境

1)操作系统版本:CentOS 7 64位(CentOS Linux release 7.6.1810)
2)DataBase & JDBC版本:

  • openGauss 2.0.1。
  • JDBC驱动版本:JDBC_2.0.0
    官方下载地址:https://opengauss.org/zh/download/ (Tips:官方最新版本3.1.0)

3)JDK版本:Java 11.0.17
登录网址:https://www.oracle.com/java/technologies/downloads/#java11
选择对应jdk版本下载。

Tips:在Windows下载完成后,通过FTP工具上传到Linux上

二、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/jdk
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

cat /etc/profile

7、重启机器或执行命令

source /etc/profile
或
sudo shutdown -r now

8、查看安装情况

java -version

可能出现的错误信息:
bash: ./java: cannot execute binary file

出现这个错误的原因可能是在32位的操作系统上安装了64位的jdk,
1、查看jdk版本和Linux版本位数是否一致。
2、查看你安装的Ubuntu是32位还是64位系统:

sudo uname -m
i686 //表示是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/db1
vi pg_hba.conf

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

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

su - omm
gs_ctl reload -D /gaussdb/data/db1

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

gsql -d postgres -p 26000 -r

CREATE USER dbuser IDENTIFIED BY 'Gauss#3demo';

postgres=# alter role dbuser createrole createdb;
ALTER ROLE

postgres=# \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;
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/db1
vi 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.2.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.2.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数据库就算完成了。

五、经验小结(FAQ)

1、数据库运行环境建议

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内部。

到此这篇关于Linux环境下的Java(JDBC)连接openGauss数据库实践记录的文章就介绍到这了,更多相关JDBC连接openGauss数据库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • openGauss的SCHEMA的原理及管理介绍

    目录 1.何为Schema摘要: 2.Schema语法 2.1 创建SCHEMA 2.2 修改SCHEMA 2.3 删除SCHEMA 3.Schema赋权 1.何为Schema摘要: 本篇介绍了openGauss的SCHEMA的原理及管理. Schema又称作模式.通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突. 数据库(database).用户(user).schema.和表的关系

  • JSON schema配置规范使用教程

    目录 介绍 使用 schemastore 编写 schema properties definitions 总结 介绍 不知道大家在写一些 JSON 配置时会不会经常觉得麻烦,每次都要打开文档去核对字段名称对不对.结尾有没有 s.结构是否正确.是不是数组等问题.然而我最近发现一些开源项目生成的配置文件中都开始使用 JSON schema 来规范配置文件,IDE 也会对 JSON 配置进行提示和检查,真香.本文介绍下 JSON schema 的使用方法和使用场景. JSON schema 是一套对

  • JSON Schema概念及使用场景

    目录 1.什么是JSON Schema 2. JSON Schema的应用场景 2.1 表单数据校验 2.2 接口数据校验 2.3 低代码 low-code 1.什么是JSON Schema 相信前端童鞋,对JSON应该都很熟悉.JSON (JavaScript Object Notation) 缩写,JSON 是一种数据格式,具有简洁.可读性高.支持广泛的特点JSON.通过JSON 我们可以灵活地来表示任意复杂的数据结构. 比如我们要描述一个人的信息,我们可以用JSON来描述 那JSON Sc

  • Monaco-editor 的 JSON Schema 配置及使用介绍

    目录 JSON Schema 作用用法 JSON Schema Core Vocabulary $schema $id $ref $dynamicRef $anchor / $dynamicAnchor $defs 关键字 type title & description default examples deprecated readOnly & writeOnly $comment enum const 媒体类型关键字 contentMediaType contentEncoding

  • 教你使用Psycopg2连接openGauss的方法

    目录 1.简介 2.接口介绍 开发流程 接口说明 3.使用 3.1环境准备 3.2下载并加载python驱动 3.3创建数据库连接用户 3.4示例 4.常见报错 1.简介 Psycopg是一种用于执行SQL语句的PythonAPI,可以为PostgreSQL.openGauss数据库提供统一访问接口,应用程序可基于它进行数据操作.Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全.它具有客户端游标和服务器端游标.异步通信和通知.支持“COPY TO/COPY FROM”功能.

  • windows环境下python连接openGauss数据库的全过程

    目录 一.python 介绍 二.Python下载及安装 三.openGauss Connectors (Psycopg2) 介绍 四.openGauss Connectors (Psycopg2)下载并初始化 五.连接并访问openGauss数据库 六.问题总结(FAQ) 总结 一.python 介绍 python最新版 windows python是款面向对象.直译式计算机程序设计语言,同时也是一种功能强大而完善的通用型语言,具有非常简洁而清晰的语法特点,适合完成各种高层任务,几乎可以在所有

  • Linux环境下的Java(JDBC)连接openGauss数据库实践记录

    目录 一.测试环境: 本实验预置环境 二.Linux环境安装Java环境及配置步骤 三.准备链接数据库的环境 四.连接测试 五.经验小结(FAQ) 一.测试环境: 本实验预置环境 1)操作系统版本:CentOS 7 64位(CentOS Linux release 7.6.1810)2)DataBase & JDBC版本: openGauss 2.0.1. JDBC驱动版本:JDBC_2.0.0官方下载地址:https://opengauss.org/zh/download/ (Tips:官方最

  • java jdbc连接mysql数据库实现增删改查操作

    jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的时候才能更好的去理解这些成熟的框架是如何去实现增删改查

  • linux环境下配置mysql5.6支持IPV6连接的方法

    简介: 本文主要介绍在linux系统下,如何配置mysql支持IPV6的连接. 环境要求: 1.debian7.5操作系统虚拟机 2.mysql5.6版本的数据库,并且已经在debian7.5系统上安装成功,可以正常通过IPV4的地址连接 配置方法 1.确认系统是否支持IPV6,输入命令ping6 ::1,有下图回显说明支持IPV6地址 2.如果不支持,配置网卡eth0增加IPV6地址 1)输入命令vim /etc/network/interfaces ,增加inet6的网卡配置 2)输入命令

  • linux环境下java程序打包成简单的hello world输出jar包示例

    本文实例讲述了linux环境下java程序打包成简单的hello world输出jar包.分享给大家供大家参考,具体如下: 1. linux必须已安装java环境,测试 #javac -version javac 1.8.0_20 说明java环境已安装好了 2. 建立目录helloworld,在目录下建立helloworld.java文件 #cd ~ ~# mkdir helloworld ~# cd helloworld ~/helloworld# vi helloworld.java he

  • 在Linux环境下安装Kafka

    目录 二.生产与消费 2.1 kafka-topics.sh 用于管理主题 2.2 kafka-console-consumer.sh用于消费消息 2.3 kafka-console-producer.sh用于生产消息 2.4 具体操作 一.环境准备 jdk下载地址链接:下载地址 zookeeper下载地址链接:下载地址 kafka下载地址链接:下载地址 1.1 Java环境为前提 1.1.1 上传jdk-8u261-linux-x64.rpm到服务器并安装 # 安装命令 rpm -ivh jd

  • Linux环境下安装JDK1.8

    本文主要介绍的是如何是Linux环境下安装JDK的,因为Linux环境下,很多时候也离不开Java的,下面笔者就和大家一起分享如何jdk1.8的过程吧. 一.安装环境 操作系统:Red Hat Enterprise Linux 6 64 位(版本号6.6) JDK版本:1.8 工具:Xshell5.Xftp5 说明:本文是通过Xshell5工具远程连接Linux操作,如果是直接在Linux可视化界面操作那就更方便了,原理一样. 二.安装步骤 第一步:下载安装包 下载Linux环境下的jdk1.8

  • Java使用jdbc连接MySQL数据库实例分析

    本文实例讲述了Java使用jdbc连接MySQL数据库的方法.分享给大家供大家参考,具体如下: 使用jdbc连接数据库: 可以直接在方法中定义url.user.psd等信息,也可以读取配置文件,但是在web项目中肯定是要使用第二种方式的,为了统一,只介绍第二种方式. 步骤 1.创建配置文件db.properties 无论是eclipse还是myeclipse,在工程下右键->new->file,以properties为后缀名就好了. 配置文件内容: #连接数据库的url,如果主机地址是loca

  • Linux环境下Oracle安装参数设置方法详解

    前面讲了虚拟机的设置和OracleLinux的安装,接下来我们来说下Oracle安装前的准备工作. 1.系统信息查看 系统信息查看 首先服务器ip:192.168.8.120 服务器系统:Oracle Linux Server release 6.5 服务器主机名:oracle-learn 查看磁盘空间情况: [root@oracle-learn ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 32G 4.8G 26G

  • 在Linux环境下采用压缩包方式安装JDK 13的方法

    什么是JDK? 好吧如果你不知道这个问题的话我实在是不知道你为什么要装这个东西. JDK(Java Development Kit)是Sun公司(后被Oracle收购)推出的面向对象程序设计语言的开发工具包,拥有这个工具包之后我们就可以使用Java语言进行程序设计和开发. 而今天我们要在Linux环境 下对这个东西进行部署以便能够进行开发,并且是以压缩包解压的方式进行安装,之所以不用rpm方式安装主要是为了能够在所有Linux系统上都通用,rpm和deb最多只能在Red Hat和Debian旗下

  • linux环境下安装python虚拟环境及注意事项

    创建python虚拟环境virtualenv.virtualenvwrapper 1,为什么需要搭建虚拟环境 由于当机器上两个项目依赖于相同包的不同版本时,会导致项目运行失败,此时可以安装虚拟环境 . 2,什么是虚拟环境 虚拟环境就是python环境的复制版本 创建虚拟环境时需要有网络连接 3,安装python.pip.virtualenv ubuntu: sudo apt-get install python3 # 安装python3 sudo apt-get install python-p

随机推荐