• KingbaseES V8 JDBC调用array参数存储过程


    概述

    之前遇到某项目迁移Oracle至KingbaseES V8, 应用为java开发,用到了java调用存储过程批量插入数据,数据以数组的形式通过存储过程的入参传入,kingbase官方文档没有发现关于java操作数组参数的相关文档及用例,本人摸索调试成功java调用带数组类型入参的存储过程,分享给大家。

    环境

    数据库服务器操作系统:CentOS 7
    数据库版本:KingbaseES V8R6
    java环境:jdk 1.8

    测试表及存储过程

    create table t_cash_batch(batch_no varchar,record_time date);
    
    \set SQLTERM /
    create or replace procedure PROC_FORALL_CASHBATCH4TRANS2(
           para1  text[],
           para2  date[]as
    begin	
    forall i in 1.. array_length(para1,1)
    INSERT INTO T_CASH_BATCH(
           BATCH_NO,RECORD_TIME)
    VALUES(para1[i],para2[i]);
    END PROC_FORALL_CASHBATCH4TRANS2;
    /
    \set SQLTERM ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    KingbaseES 数组类型

    KingbaseES允许一个表中的列定义为变长多维数组。可以创建任何内建或用户定义的基类、枚举类型、组合类型或者域的数组。

    数组类型的定义:
    为了展示数组类型的使用,我们创建这样一个表:

    CREATE TABLE sal_emp (
        name            text,
        pay_by_quarter  integer[],
        schedule        text[][]
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如上所示,一个数组数据类型可以通过在数组元素的数据类型名称后面加上方括号( [] )来命名。上述命令将创建一个名为 sal_emp 的表,它有一个类型为 text 的列( name ),一个表示雇员的季度工资的一维 integer 类型数组( pay_by_quarter ),以及一个表示雇员每周日程表的二维 text 类型数组( schedule )。

    JDBC接口数组类型:java.sql.Array
    kingbase的 jdbc接口数组实现:com.kingbase8.jdbc.KbArray
    KBConnection类带有数据元素初始化方法:
    Array createArrayOf(String typeName, @Nullable Object elements)
    参数typeName为数据元素类型;
    参数elements为数据元素值;

    测试程序示例

    package bindarrayTest;
    
    import java.sql.Array;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
    
    import com.kingbase8.jdbc.KbArray;
    
    public class BindArrayTest {
    
    	protected String Driver = "com.kingbase8.Driver";
        
        protected Connection connection = null;
        
        protected void Driver() throws ClassNotFoundException
        {
            Class.forName(Driver);
        }
           
        
    	public static void main(String[] args) throws ClassNotFoundException,SQLException,InterruptedException{
    		// TODO Auto-generated method stub
    		BindArrayTest atest=new BindArrayTest();
    		atest.Driver();
    		
    		String url = "jdbc:kingbase8://192.168.40.100:54321/test";
    		Connection conn=DriverManager.getConnection(url, "system", "111111");
    		if(conn != null)
        	{
        		System.out.println("connection sucessful!");
        	}else{
        		System.out.println("connection fail!");
        	}
    		String[] a= {"Beijing","Shanghai","Tianjin"};
    		Timestamp[] b= {Timestamp.valueOf("2022-11-21 12:21:23"),Timestamp.valueOf("2021-12-14 15:21:34"),Timestamp.valueOf("2020-12-14 12:21:34")};
    		Array aArray=conn.createArrayOf("text", a);
    		Array bArray=conn.createArrayOf("Date", b);
    		
    		String insertPro="{call PROC_FORALL_CASHBATCH4TRANS2(?,?)}";
    		PreparedStatement cstmt=conn.prepareCall(insertPro);
    		conn.setAutoCommit(false);
    		cstmt.setObject(1, aArray);
    		cstmt.setObject(2, bArray);
    		
    		cstmt.execute();
    		conn.commit();
    		conn.setAutoCommit(true);
    
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    《学术小白学习之路11》DTM主题动态模型原理与基础构建
    数据标注的终点会是众包么?(AI数据标注猿交流社区群欢迎加入)
    队列的原理和实现代码
    CentOS常见的命令
    极市直播丨南京理工大学魏秀参、沈阳:大规模细粒度图像检索
    【运维心得】windows11安装mysql8解压版
    C++ Reference: Standard C++ Library reference: Containers: array: array: back
    12种绝佳买入形态k线图(下)
    0033【Edabit ★☆☆☆☆☆】【字符串表达式计算器】Miserable Parody of a Calculator
    pg数据表同步到hive表数据压缩总结
  • 原文地址:https://blog.csdn.net/sxqinjh/article/details/127944091