首页 > 其他分享 >GBase8c使用JDBC获取游标类型数据

GBase8c使用JDBC获取游标类型数据

时间:2024-07-29 14:17:26浏览次数:11  
标签:JDBC users 游标 stmt cursor GBase8c

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

相关文章

  • 一篇学会JDBC的使用。
    目录一、基础篇1.1概念1.2快速入门1.3核心API讲解1.4基于PreparedStatement实现CRUD(创建,读取,更新,删除四种操作)1.4.1查询1.4.1增,删,改二、进阶篇2.1jdbc扩展2.2主键回显2.3连接池(Druid为例)2.4properties集合三、高级篇3.1jdbc工具类封装3.2Dao层......
  • 3、集成Mybatis框架、JDBC、mybatis-plus
    简化代码加入lombok依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> 1、pom.xml添加jdbc、mysql驱动、mybatis框架、mybatis-plus<dependency><groupId>org.sprin......
  • 【YashanDb知识库】YashanDB的JDBC/OCI驱动如何设置字符编码
    问题现象Oracle、Mysql数据库链接串,JDBC驱动连接串可以指定客户端的编码格式:jdbc:mysql://hostname:port/database_name?useUnicode=true&characterEncoding=utf8mb4jdbc:oracle:thin:@//hostname:port/service_name?NLS_LANGUAGE=AMERICAN&NLS_TERRITORY=AMERICA&NLS_CHARACTE......
  • 求教Postgresql在jdbc处理bit(1)字段的预处理解决方案
    文章目录1.建表语句:2.使用以下方式的预处理方式都报错了3.可以先用sql拼接实现功能1.建表语句:CREATETABLEpublic.h_user( idserial4notnull, usernamevarchar(50)NULL, "password"varchar(64)NULL, nicknamevarchar(60)NULL, emailvarchar(255)N......
  • 【YashanDB数据库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIE
    问题现象客户的java日志中有如下异常信息:问题的风险及影响对正常的业务流程无影响,但是影响druid的mergesql功能(此功能会将sql语句中的字面量替换为绑定变量,然后将替换以后的sql视为同一个,然后用做执行性能统计)问题影响的版本与yashandb版本无关问题发生原因druid源码中在......
  • Jmeter取样器--- JDBC request
    以mysql为例1、将访问mysql的jdbc的jar包放入jmeter\lib\ext目录下,如E:\JMeter\apache-jmeter-5.6.3\lib\ext,重新启动jmeter。驱动下载地址:MySQL::DownloadMySQLConnector/J(ArchivedVersions)2、添加配置元件“JDBCConnectionConfiguration”,如图所示3、JDBCConne......
  • 如何在不修改DBAPI游标的情况下捕获SQLAlchemy中的所有SQL查询结果?
    我正在尝试实现一个系统,该系统捕获SQLAlchemy中的所有查询结果以用于日志记录和分析目的。然而,在尝试直接修改DBAPI游标时,我遇到了挑战,因为它的属性通常是只读的。因此需要:捕获SELECTSQL查询的所有结果,并使用不同的结果获取方法(fetchone、fetchmany、fetchall、ite......
  • shardingjdbc 使用记录
    注意几个概念:数据源,数据源别名(shardingjdbc的配置会给每个数据源配置别名)db实例(物理概念),逻辑库如果db实例是同一个的话,那么可以只配置一个数据源,通过shardingjdbc的路由策略来路由到具体的逻辑库。这样可以降低db的连接数。  配置了hint的路由策略,但是没有生效,断点......
  • 【vue+jdbc实现数据库操作java web前后分离版】
    创建数据库droptableifexistsusers;createtableusers(idbigint(20)notnullauto_incrementcomment'用户id',usernamevarchar(100)default''comment'用户名',phone......
  • JDBC无法用SSL连接SqlServer2008的解决方法
    禁用了TLS1.1,使JDBC无法用SSL连接SqlServer2008怎么办,以下是解决办法找到jre的java.security文件如果是jre,在{JAVA_HOME}/jre/lib/security中,比如C:\ProgramFiles\Java\jre1.8.0_301\lib\security打开java.security并搜索“jdk.tls.disabledAlgorithms=”找......