GBase8c使用JDBC获取游标类型数据
JDBC游标GBase8c当JDBC遇到cursor时,如何处理?
使用 jdbc 访问 GBase8c数据库里的 cursor 游标数据,可以通过下面用例获取游标数据。
一、创建自定义函数
CREATE OR REPLACE FUNCTION get_users()
RETURNS refcursor AS $$
DECLARE
result_cursor refcursor;
BEGIN
OPEN result_cursor FOR
SELECT * FROM users;
RETURN result_cursor;
END;
$$ LANGUAGE plpgsql;
二、创建测试表
create table users( id int, name varchar2(10));
insert into users values(1,'张三'),(2,'李四'),(3,'王五');
三、游标数据调用
try {
// 1. 注册 GBase8c JDBC 驱动程序
Class.forName("cn.gbase8c.Driver");
// 2. 建立连接
Connection connection = DriverManager.getConnection(jdbcURL, username, password);
// 3. 调用存储过程
String call = "{ ? = call get_users() }";
connection.setAutoCommit(false); //一定要加
CallableStatement stmt = connection.prepareCall(call);
// 4. 注册输出参数类型
//stmt.registerOutParameter(1,OracleTypes.CURSOR );
//stmt.registerOutParameter(1,1111 );
stmt.registerOutParameter(1,Types.REF_CURSOR );
// 5. 执行查询
stmt.execute();
// 6. 获取结果集
ResultSet rs = (ResultSet) stmt.getObject(1);
// 7. 处理结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
// 根据需要处理其他字段
System.out.println("ID: " + id + ", Name: " + name);
}
需要注意的
1、setAutoCommit(false) 需要添加,如果缺少会存在异常报错
2、registerOutParameter的类型支持oracle 的OracleTypes.CURSOR、1111以及Types.REF_CURSOR
四、调用结果如下
PS E:\***\工具测试\jdbc> & 'C:\Program Files\Java\jdk-1.8\bin\java.exe' '-cp' 'C:\Users\admin\AppData\Local\Temp\cp_ecrp2xm8badu5vq7hoznm7696.jar' 'jdbccallproc'
ID: 1, Name: 张三
ID: 2, Name: 李四
ID: 3, Name: 王五
GBase 8c是基于openGauss3.0构建的一款多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备式、分布式等多种部署形态。GBase 8c具备高性能、高可用、弹性伸缩、高安全性等特性,可以部署在物理机、虚拟机、容器、私有云和公有云,为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。
标签:JDBC,users,游标,stmt,cursor,GBase8c From: https://www.cnblogs.com/balon/p/18329976