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;
// 注册 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{
// 关闭资源
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什么都不做
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”后再试。配置方法见官网《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节 。
到此这篇关于Linux环境下的Java(JDBC)连接openGauss数据库实践记录的文章就介绍到这了,更多相关JDBC连接openGauss数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2006-2023 脚本之家 JB51.Net , All Rights Reserved.
苏ICP备14036222号