欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux環(huán)境下的Java(JDBC)連接openGauss數(shù)據(jù)庫實(shí)踐記錄

 更新時(shí)間:2022年11月23日 14:52:02   作者:Gauss松鼠會(huì)  
這篇文章主要介紹了Linux環(huán)境下的Java(JDBC)連接openGauss數(shù)據(jù)庫實(shí)踐記錄,需要的朋友可以參考下

一、測(cè)試環(huán)境:

本實(shí)驗(yàn)預(yù)置環(huán)境

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

  • openGauss 2.0.1。
  • JDBC驅(qū)動(dòng)版本:JDBC_2.0.0
    官方下載地址:https://opengauss.org/zh/download/ (Tips:官方最新版本3.1.0)

3)JDK版本:Java 11.0.17
登錄網(wǎng)址:https://www.oracle.com/java/technologies/downloads/#java11
選擇對(duì)應(yīng)jdk版本下載。

Tips:在Windows下載完成后,通過FTP工具上傳到Linux上

二、Linux環(huán)境安裝Java環(huán)境及配置步驟

1、登錄到Linux環(huán)境,切換到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 發(fā)送到Linux系統(tǒng),在通過cp命令進(jìn)行復(fù)制)

4、解壓jdk到當(dāng)前目錄,得到文件夾“jdk-11.0.17”(Tips:下載不同版本的JDK文件名不同)。

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

5、安裝完畢可以建立一個(gè)鏈接以節(jié)省目錄長(zhǎng)度

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

6、編輯配置文件,配置環(huán)境變量
vi /etc/profile
在文本的末尾添加如下內(nèi)容:

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、重啟機(jī)器或執(zhí)行命令

source /etc/profile  
或   
sudo shutdown -r now

8、查看安裝情況

java -version

可能出現(xiàn)的錯(cuò)誤信息:
bash: ./java: cannot execute binary file

出現(xiàn)這個(gè)錯(cuò)誤的原因可能是在32位的操作系統(tǒng)上安裝了64位的jdk,
1、查看jdk版本和Linux版本位數(shù)是否一致。
2、查看你安裝的Ubuntu是32位還是64位系統(tǒng):

sudo uname -m
i686 //表示是32位
x86_64 // 表示是64位

到此, Java環(huán)境配置完成。

三、準(zhǔn)備鏈接數(shù)據(jù)庫的環(huán)境

1、修改數(shù)據(jù)庫的pg_hba.conf文件。
在GS_HOME中查找pg_hba.conf文件,本實(shí)驗(yàn)中數(shù)據(jù)庫GS_HOME設(shè)置的為/gaussdb/data/db1,實(shí)際操作中GS_HOME地址可以查看安裝時(shí)的配置文件
“/soft/openGauss/clusterconfig.xml”中的

cd /gaussdb/data/db1
vi pg_hba.conf

將以下內(nèi)容添加進(jìn)pg_hba.conf文件中。(Tips: 當(dāng)在鏈接時(shí)如果提示“FATAL: Forbid remote connection with trust method!”,則需要更改目標(biāo)IP對(duì)應(yīng)的 客戶端接入認(rèn)證 將 trust 改成sha256)。

切換omm用戶登錄,使用gs_ctl命令將策略生效。

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

2、連接數(shù)據(jù)庫后,進(jìn)入SQL命令界面。創(chuàng)建測(cè)試用戶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、創(chuàng)建測(cè)試數(shù)據(jù)庫demo。
使用gsql工具登錄數(shù)據(jù)庫。登錄用戶為dbuser,密碼為Gauss#3demo(或者為用戶自定義的密碼)。

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

創(chuàng)建數(shù)據(jù)庫demo

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

4、創(chuàng)建名為demo的schema,并設(shè)置demo為當(dāng)前的schema。

CREATE SCHEMA demo;
SET search_path TO demo;

5、創(chuàng)建測(cè)試表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 '站點(diǎn)名稱';

6、插入數(shù)據(jù)。

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

7、退出數(shù)據(jù)庫

postgres=# \q

8、修改數(shù)據(jù)庫監(jiān)聽地址。
在GS_HOME中,本實(shí)驗(yàn)中數(shù)據(jù)庫GS_HOME設(shè)置的為/gaussdb/data/db1。
cd /gaussdb/data/db1
vi postgresql.conf
將listen_addresses的值修改成為*。
listen_addresses = ‘*’
修改完成后重啟數(shù)據(jù)庫生效(-D后面的數(shù)據(jù)庫默認(rèn)路徑,需要根據(jù)實(shí)際情況進(jìn)行修改)。
gs_ctl restart -D /gaussdb/data/db1

9、將對(duì)應(yīng)的JDBC驅(qū)動(dòng)包 “postgresql.jar” 上傳到 /soft 目錄 。(Tips:可通過FTP或者SSH 發(fā)送到Linux系統(tǒng),在通過cp命令進(jìn)行復(fù)制)。

到此, 鏈接數(shù)據(jù)庫的環(huán)境準(zhǔn)備就緒。

四、連接測(cè)試

1、連接openGauss并執(zhí)行java代碼
1)使用Java程序連接數(shù)據(jù)庫并進(jìn)行查詢。在/soft目錄中創(chuàng)建openGaussDemo.java文件:
vi /soft/openGaussDemo.java

進(jìn)入編輯openGaussDemo.java文件模式:
i
將如下文件內(nè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";
      // 數(shù)據(jù)庫的用戶名與密碼,需要根據(jù)自己的設(shè)置
    static final String USER = "dbuser";
    static final String PASS = "Gauss#3demo";
     public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注冊(cè) JDBC 驅(qū)動(dòng)
            Class.forName(JDBC_DRIVER);
        
            // 打開鏈接
            System.out.println("連接數(shù)據(jù)庫...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
        
            // 執(zhí)行查詢
            System.out.println(" 實(shí)例化Statement對(duì)象...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM demo.websites";
            ResultSet rs = stmt.executeQuery(sql);
        
            // 展開結(jié)果集數(shù)據(jù)庫
            while(rs.next()){
                // 通過字段檢索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");
    
                // 輸出數(shù)據(jù)
                System.out.print("ID: " + id);
                System.out.print(", 站點(diǎn)名稱: " + name);
                System.out.print(", 站點(diǎn) URL: " + url);
                System.out.print("\n");
            }
            // 完成后關(guān)閉
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 處理 JDBC 錯(cuò)誤
            se.printStackTrace();
        }catch(Exception e){
            // 處理 Class.forName 錯(cuò)誤
            e.printStackTrace();
        }finally{
            // 關(guān)閉資源
            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!保存退出。
說明:請(qǐng)用戶根據(jù)實(shí)際情況替換紅字內(nèi)容,修改
jdbc:postgresql://192.168.2.3:26000/postgres中的IP信息,以及連接數(shù)據(jù)庫的用戶及密碼USER = “dbuser”、 PASS = “Gauss#3demo” 。

2、在安裝Java的本機(jī),對(duì)Java程序編譯后執(zhí)行。
先對(duì)Java程序進(jìn)行編譯(進(jìn)入Java程序的目錄)
javac -encoding utf-8 -cp /soft/postgresql.jar openGaussDemo.java

再執(zhí)行以下命令(Tips:注意“.:”的書寫)。
java -cp .:/soft/postgresql.jar openGaussDemo

3、執(zhí)行結(jié)果

至此,在linux環(huán)境下java訪問openGauss數(shù)據(jù)庫就算完成了。

五、經(jīng)驗(yàn)小結(jié)(FAQ)

1、數(shù)據(jù)庫運(yùn)行環(huán)境建議

1)支持的硬件平臺(tái)
openGauss支持運(yùn)行在ARM服務(wù)器和通用的x86服務(wù)器上:

支持ARM服務(wù)器和基于x86_64的通用PC服務(wù)器。
支持本地存儲(chǔ)(SATA、SAS、SSD)。
支持千兆、萬兆Ethernet網(wǎng)絡(luò)。

2)支持的操作系統(tǒng)
ARM:openEuler 20.03LTS(推薦采用此操作系統(tǒng))、麒麟V10、Asianux 7.5
X86:openEuler 20.03LTS、CentOS 7.6、Asianux 7.6

2、JDBC開發(fā)應(yīng)用程序的流程

3、連接故障說明

1)gsql: could not connect to server: No route to host
此問題一般是指定了不可達(dá)的地址或者端口導(dǎo)致的。請(qǐng)檢查-h參數(shù)與-p參數(shù)是否添加正確。

2)gsql: FATAL: Invalid username/password,login denied.
此問題一般是輸入了錯(cuò)誤的用戶名和密碼導(dǎo)致的,請(qǐng)聯(lián)系數(shù)據(jù)庫管理員,確認(rèn)用戶名和密碼的正確性。

3)gsql: FATAL: Forbid remote connection with trust method!
數(shù)據(jù)庫由于安全問題,禁止遠(yuǎn)程登錄時(shí)使用trust模式。這時(shí)需要修改pg_hba.conf里的連接認(rèn)證信息。具體的設(shè)置信息請(qǐng)參見:官方《開發(fā)者指南》中“管理數(shù)據(jù)庫安全 > 客戶端接入認(rèn)證 > 配置文件參考”章節(jié)。 ——實(shí)驗(yàn)過程中遇到此錯(cuò)誤tips

說明:請(qǐng)不要修改pg_hba.conf中openGauss主機(jī)的相關(guān)設(shè)置,否則可能導(dǎo)致數(shù)據(jù)庫功能故障。建議業(yè)務(wù)應(yīng)用部署在openGauss之外,而非openGauss內(nèi)部。

4)The “libpq.so” loaded mismatch the version of gsql, please check it.
此問題是由于環(huán)境中使用的libpq.so的版本與gsql的版本不匹配導(dǎo)致的,請(qǐng)通過“ldd gsql”命令確認(rèn)當(dāng)前加載的libpq.so的版本,并通過修改LD_LIBRARY_PATH環(huán)境變量來加載正確的libpq.so。

5)gsql: symbol lookup error: xxx/gsql: undefined symbol: libpqVersionString
此問題是由于環(huán)境中使用的libpq.so的版本與gsql的版本不匹配導(dǎo)致的(也有可能是環(huán)境中存在PostgreSQL的libpq.so),請(qǐng)通過“ldd gsql”命令確認(rèn)當(dāng)前加載的libpq.so的版本,并通過修改LD_LIBRARY_PATH環(huán)境變量來加載正確的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?
此問題是由于網(wǎng)絡(luò)連接故障造成。請(qǐng)檢查客戶端與數(shù)據(jù)庫服務(wù)器間的網(wǎng)絡(luò)連接。如果發(fā)現(xiàn)從客戶端無法PING到數(shù)據(jù)庫服務(wù)器端,則說明網(wǎng)絡(luò)連接出現(xiàn)故障。

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

此問題是由于用戶不具備訪問該數(shù)據(jù)庫的權(quán)限,可以使用如下方法解決。
a.使用管理員用戶dbadmin連接數(shù)據(jù)庫。
gsql -d postgres -U dbadmin -p 5432

b.賦予該用戶訪問數(shù)據(jù)庫的權(quán)限。
GRANT CONNECT ON DATABASE postgres TO user1;

8)gsql: FATAL: sorry, too many clients already,active/non-active: 197⁄3.
此問題是由于系統(tǒng)連接數(shù)量超過了最大連接數(shù)量。請(qǐng)進(jìn)行會(huì)話連接數(shù)管理,釋放無用會(huì)話。
會(huì)話狀態(tài)可以在視圖PG_STAT_ACTIVITY中查看。無用會(huì)話可以使用函數(shù)pg_terminate_backend進(jìn)行釋放。

select datid,pid,state from pg_stat_activity;
datid | pid | state -------±----------------±------- 13205 | 139834762094352 | active 13205 | 139834759993104 | idle (2 rows)

其中pid的值即為該會(huì)話的線程ID。根據(jù)線程ID結(jié)束會(huì)話。
SELECT PG_TERMINATE_BACKEND(139834759993104);

顯示類似如下信息,表示結(jié)束會(huì)話成功。
PG_TERMINATE_BACKEND ---------------------- t (1 row)

9)gsql: wait xxx.xxx.xxx.xxx:xxxx timeout expired
gsql在向數(shù)據(jù)庫發(fā)起連接的時(shí)候,會(huì)有5分鐘超時(shí)機(jī)制,如果在這個(gè)超時(shí)時(shí)間內(nèi),數(shù)據(jù)庫未能正常的對(duì)客戶端請(qǐng)求進(jìn)行校驗(yàn)和身份認(rèn)證,那么gsql會(huì)退出當(dāng)前會(huì)話的連接過程,并報(bào)出如上錯(cuò)誤。
一般來說,此問題是由于連接時(shí)使用的-h參數(shù)及-p參數(shù)指定的連接主機(jī)及端口有誤(即錯(cuò)誤信息中的xxx部分),導(dǎo)致通信故障;極少數(shù)情況是網(wǎng)絡(luò)故障導(dǎo)致。要排除此問題,請(qǐng)檢查數(shù)據(jù)庫的主機(jī)名及端口是否正確。

10)gsql: could not receive data from server: Connection reset by peer.
同時(shí),檢查數(shù)據(jù)庫主節(jié)點(diǎn)日志中出現(xiàn)類似如下日志“ FATAL: cipher file “/data/dbnode/server.key.cipher” has group or world access”,一般是由于數(shù)據(jù)目錄或部分關(guān)鍵文件的權(quán)限被誤操作篡改導(dǎo)致。請(qǐng)參照其他正常實(shí)例下的相關(guān)文件權(quán)限,修改回來便可。

11)gsql: FATAL: GSS authentication method is not allowed because XXXX user password is not disabled.
目標(biāo)數(shù)據(jù)庫主節(jié)點(diǎn)的pg_hba.conf里配置了當(dāng)前客戶端IP使用”gss”方式來做認(rèn)證,該認(rèn)證算法不支持用作客戶端的身份認(rèn)證,請(qǐng)修改到”sha256”后再試。配置方法見官網(wǎng)《開發(fā)者指南》中“管理數(shù)據(jù)庫安全 > 客戶端接入認(rèn)證 > 配置文件參考”章節(jié) 。

說明:

  • 請(qǐng)不要修改pg_hba.conf中openGauss主機(jī)的相關(guān)設(shè)置,否則可能導(dǎo)致數(shù)據(jù)庫功能故障。
  • 建議業(yè)務(wù)應(yīng)用部署在openGauss之外,而非openGauss內(nèi)部。

到此這篇關(guān)于Linux環(huán)境下的Java(JDBC)連接openGauss數(shù)據(jù)庫實(shí)踐記錄的文章就介紹到這了,更多相關(guān)JDBC連接openGauss數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計(jì)模式之策略模式定義與用法詳解

    Java設(shè)計(jì)模式之策略模式定義與用法詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之策略模式定義與用法,結(jié)合具體實(shí)例形式詳細(xì)分析了Java策略模式的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • StateMachine 狀態(tài)機(jī)機(jī)制深入解析

    StateMachine 狀態(tài)機(jī)機(jī)制深入解析

    這篇文章主要介紹了,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • java中數(shù)組的應(yīng)用及方法

    java中數(shù)組的應(yīng)用及方法

    本篇文章介紹了,java中數(shù)組的應(yīng)用及方法。需要的朋友參考下
    2013-04-04
  • springboot不掃描@repository的問題及解決

    springboot不掃描@repository的問題及解決

    這篇文章主要介紹了springboot不掃描@repository的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關(guān)于Java中Comparable 和 Comparator的用法

    關(guān)于Java中Comparable 和 Comparator的用法

    這篇文章主要介紹了關(guān)于Java中Comparable 和 Comparator的用法,Comparable 和 Comparator 是關(guān)于排序的兩個(gè)接口,用來實(shí)現(xiàn) Java 集合中的的排序功能,需要的朋友可以參考下
    2023-04-04
  • Java批量轉(zhuǎn)換文件編碼格式的實(shí)現(xiàn)方法及實(shí)例代碼

    Java批量轉(zhuǎn)換文件編碼格式的實(shí)現(xiàn)方法及實(shí)例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn) 批量轉(zhuǎn)換文件編碼格式的方法及實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • idea如何設(shè)置Git忽略對(duì)某些文件或文件夾的版本追蹤

    idea如何設(shè)置Git忽略對(duì)某些文件或文件夾的版本追蹤

    這篇文章主要介紹了idea如何設(shè)置Git忽略對(duì)某些文件或文件夾的版本追蹤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java內(nèi)部類之間的閉包和回調(diào)詳解

    Java內(nèi)部類之間的閉包和回調(diào)詳解

    相信閉包和回調(diào)對(duì)每位學(xué)習(xí)Java的人來說都不陌生,那么今天小編和大家分享一篇關(guān)于Java內(nèi)部類之間的閉包和回調(diào),有需要的可以參考借鑒。
    2016-09-09
  • Java利用Selenium操作瀏覽器的示例詳解

    Java利用Selenium操作瀏覽器的示例詳解

    本文主要介紹如何使用java代碼利用Selenium操作瀏覽器,某些網(wǎng)頁元素加載慢,如何操作元素就會(huì)把找不到元素的異常,此時(shí)需要設(shè)置元素等待,等待元素加載完,再操作,感興趣的可以了解一下
    2023-01-01
  • Mybatis通用Mapper(tk.mybatis)的使用

    Mybatis通用Mapper(tk.mybatis)的使用

    本文主要介紹了Mybatis通用Mapper(tk.mybatis)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論