JDBC给存储过程传递数组类型的参数

用JDBC给存储过程传递数组类型的参数 收藏

A . 嵌套表

1. 声明数组类型
create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型

2. 创建存储过程
-- 该例子存储过程是在包中创建的,包名 arraydemo
procedure testArray(resNumber in tab_array,procResult out tab_array) is
begin
procResult := new tab_array();
for i in 1..resNumber.Count loop
procResult.EXTEND;
procResult(i) := resNumber(i) || 'lucifer' || i;
end loop;
end;

3. Java调用代码
//必须使用Oracle的连接和Statement,使用了连接池的必须通过一些方法获取原始的连接
OracleConnection conn = null;
OracleCallableStatement stmt = null;
String[] param = { "1001", "1002", "1006" };
stmt =(转换类型) conn.prepareCall("{call arraydemo.testArray(?,?)}");
// 类型名必须大写
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn);
stmt.setARRAY(1, new ARRAY(descriptor,conn,param));
stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY");
stmt.execute();

ARRAY array = stmt.getARRAY(2);
Datum[] data = array.getOracleArray();
for (int i = 0; i < data.length; i++) {
System.out.println(i + " : " + new String(data.shareBytes()));
}
4 . 注意的问题及尚未解决的问题
抛出:Non supported character set: oracle-character-set-852 异常---解决:添加 nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录下
待解决问题:
a) 如何调用在包声明的自定义类型
b) 比较不同声明类型的优缺点,及使用场合
嵌套表其它应用:http://zhouwf0726.itpub.net/post/9689/212253

例程:

import java.sql.*;

public class DBDeclareTest{
private Connection con = null;// 数据库连接
private java.sql.CallableStatement cs = null;//执行存储过程的接口

private int key;
private String name;

//在构造函数中构造连接
public DBDeclareTest(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=pubs","sa","");
System.out.println ("con ok");
}
catch (Exception ex) {
ex.printStackTrace();
}
}

//调用无返回值的存储过程
public void getOK1(){
try {
String sql="{call pro_mypro1(?,?)}";
cs = con.prepareCall(sql);
cs.setInt(1,key);
cs.setString(2,name);
cs.executeUpdate();
System.out.println ("执行成功,可以休息了。。。。");
cs.close();
con.close();
}
catch (Exception ex) {
ex.printStackTrace();
}

}
//调用有返回值的存储过程
public void getOK2(){
try {
String sql = "{call pro_mypro2(?,?)}";
cs = con.prepareCall(sql);
//设置output外部传参
cs.registerOutParameter(1,java.sql.Types.BIT);
cs.setString(2,name);
cs.execute();
//获得output外部传参的值
int numOut = cs.getInt(1);
if(numOut ==1){
System.out.println ("数据表存在");
}else{
System.out.println ("数据表不存在!!!");
}
cs.close();
con.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}

//返回结果集的存储过程
public void getOK3(){
try {
String sql = "{call pro_mypro3(?,?)}";
cs = con.prepareCall(sql);
//设置output外部传参
cs.registerOutParameter(1,java.sql.Types.BIT);
cs.setString(2,name);
boolean flag = cs.execute();
System.out.println (flag);
if(flag){
System.out.println ("OKOKOKO");
ResultSet rs = cs.getResultSet();
ResultSetMetaData rsmd =rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while(rs.next()){
for(int i=0;i<numberOfColumns;i++)
{
System.out.println (rsmd.getColumnName(i)+" ");
System.out.println (rs.getObject(i)+" ");
}
}
}else
{
System.out.println ("表名不存在:"+cs.getBoolean(1));
}
cs.close();
con.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}

public void setKey(int k){
this.key = k;
}
public int getKey(){
return this.key;
}
public void setName(String n){
this.name = n;
}
public String getName(){
return this.name;
}

}

Abaqus中Cohesive单元建模:从本构到失效的完整指南 本文提供了Abaqus中Cohesive单元建模的完整指南,涵盖从本构模型到失效分析的全过程。详细解析了Cohesive单元作为模拟界面粘结与失效的关键工具,其核心在于弹性本构、损伤起始准则和损伤演化定律的设置。文章通过双悬臂梁(DCB)实例,手把手指导前处理、材料定义、求解设置及后处理分析,并分享了刚度、强度、断裂能等关键参数的影响与收敛性调优的实用避坑技巧,帮助用户准确模拟复合材料及胶接结构的界面失效行为。 阅读详情

相关推荐

【STM32】433MHz OOK信号软解码实战:从EV1527协议到嵌入式实现

本文详细介绍了基于STM32微控制器实现433MHz OOK信号软解码的完整实战过程。文章从EV1527协议解析入手,重点阐述了利用STM32的GPIO和定时器进行信号采样、脉宽还原、同步头识别以及数据位判决的核心算法,并提供了对抗无线干扰的容错优化策略,帮助开发者深入理解并掌握低成本无线通信的嵌入式实现方案。

weixin_29299807的博客 783

jdbc的使用,如何传参查询,如何关闭连接、对象、结果集,如何将查询的数据封装进对象集合

jdbc的使用,如何传参查询,如何关闭连接、对象、结果集,如何将查询的数据封装进对象集合

C19150872001的博客 1724

Android 12 HAL开发避坑实录:手把手教你用AIDL在Native层实现一个可开机自启动的Service

本文详细介绍了在Android 12 HAL开发中,如何通过AIDL在Native层实现一个可开机自启动的Service。从环境准备、AIDL接口定义、服务实现到VINTF集成与SELinux策略配置,提供了完整的实战指南,帮助开发者避开常见陷阱,提升开发效率。

weixin_28314575的博客 321

JDBC常用参数解析

Druid 基本配置 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this); jdbcUrl:连接地址,如:mysql : jdbc:mysql://127.0.0.1:3306/test-db; username:用户名; pa...

大道至简 6205

burpsuite抓取ios数据包

1:首先在burpsuite中设置 添加proxy listeners 2:电脑开热点,手机连接,把代理设为电脑的ip和代理的端口 3:在Safari浏览器中打开网址http://burp下载证书 4:打开设置->通用->描述文件与设备管理 5:设置->通用->关于本机->证书信任设置 之后就可以正常抓包了 ...

weixin_45682070的博客 2065

vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复

本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。

pz890123的博客 1293

JDBC 所有参数说明(最全)

通过 JDBC 源码国际化配置文件 LocalizedErrorMessages.properties 找到对所有配置的说明

李虹柏的博客 2万+

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2552

JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)

文章目录前言数据的持久化Java数据存储技术JDBC介绍JDBC体系结构获取数据库链接Driver接口加载注册JDBC驱动获取数据库链接数据库链接方式(实例)方式一:代码中显示出现了第三方数据库API(不推荐)方式二:代码中不体现第三方数据库API(推荐)PreparedStatement实现CRUD操作两种技术PreparedStatement介绍使用Statement操作数据表的弊端(不推荐)PreparedStatement的使用PreparedStatement介绍PreparedStatement

SixFeet Under的博客 1944

多模型动态路由(Fusion):从“算力霸权”到“架构分权”的工程范式转型

多模型动态路由(Multi-Model Dynamic Routing)是指在多个大语言模型之间,根据请求特征、资源约束和业务目标,动态选择最优模型或模型组合的技术范式。传统网关擅长管理请求流量,但不理解“任务类型”。而AI路由层需要对每个请求进行语义理解、能力匹配和成本评估。从“算力霸权”到“架构分权”,这不是技术的线性演进,而是工程范式的根本转型。过去三年,开发者的核心能力是“选对模型”——在GPT、Claude、Gemini之间做出正确选择。

ZDQ58818的博客 73

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1044

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

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

sxqinjh的博客 1268

量子化学仿真软件:VASP_(7).表面与界面性质模拟

在量子化学仿真软件领域,表面与界面性质的模拟是研究多相催化、表面反应、材料科学等领域的关键工具。VASP(Vienna Ab Initio Simulation Package)作为一种广泛使用的密度泛函理论(DFT)计算软件,提供了强大的功能来模拟表面与界面的性质。本节将详细介绍如何使用VASP进行表面与界面性质的模拟,包括模型构建、输入文件准备、计算设置、结果分析等步骤。

kkchenjj的博客 948

用JDBC给存储过程传递数组类型的参数 zz

from http://blog.youkuaiyun.com/Icandoeverything/archive/2009/03/19/4005535.aspx 用JDBC给存储过程传递数组类型的参数 收藏 A . 嵌套表 1. 声明数组类型        create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 2. 创建存...

开发笔记 171

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用JDBC给存储过程传递数组类型的参数

A . 嵌套表 1. 声明数组类型        create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 2. 创建存储过程          -- 该例子存储过程是在包中创建的,包名 arraydemo          procedure testArray(resNumber in tab_array,pr

Icandoeverything的专栏 7124

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何用JDBC给存储过程传递数组类型的参数

A . 嵌套表 1. 声明数组类型        create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 2. 创建存储过程          -- 该例子存储过程是在包中创建的,包名 arraydemo          procedure testArray(resNumber in tab_array,pr...

JavaEE架构与开发 356

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java jdbc 传参_java – 使用简单的jdbc调用将数组作为输入参数传递给oracle存储过程...

这是我的oracle程序规范CREATE OR REPLACE PACKAGE PKG_RE_FI ASPROCEDURE PRC_RE_FI_DETAILS(P_FAN_NO IN VARCHAR2,P_REF_ID IN TY_APP_REF_ID,P_COMMENTS IN VARCHAR2,P_BILLING_FLAG IN VARCHAR2,P_STATU...

weixin_33308507的博客 382

java向oracle存储过程中传递字符串数组,java – 使用简单的jdbc调用将数组作为输入参数传递给oracle存储过程...

这是我的oracle程序规范CREATE OR REPLACE PACKAGE PKG_RE_FI ASPROCEDURE PRC_RE_FI_DETAILS(P_FAN_NO IN VARCHAR2,P_REF_ID IN TY_APP_REF_ID,P_COMMENTS IN VARCHAR2,P_BILLING_FLAG IN VARCHAR2,P_STATU...

weixin_39876592的博客 304

java用in输入数组_java – 使用简单的jdbc调用将数组作为输入...

这是我的oracle程序规范CREATE OR REPLACE PACKAGE PKG_RE_FI ASPROCEDURE PRC_RE_FI_DETAILS(P_FAN_NO IN VARCHAR2,P_REF_ID IN TY_APP_REF_ID,P_COMMENTS IN VARCHAR2,P_BILLING_FLAG IN VARCHAR2,P_STATU...

weixin_35551678的博客 352

JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程

参看了前人的一些资料,自己试了试,有几处改进: 1.关于字符集:11g的jdbc驱动叫orai18n.jar,之前是nls_charset.jar/classes12.jar 2.ArrayDescriptor:java传入oracle的数组需要处理一下 3.oracle.jdbc.OracleTypes.CURSOR:java获得oracle的游标。 package TEST...

静静地思考简单的事情 213

Oracle对像和类型

Oracle创建一个对象: CREATE TYPE Test_Type AS OBJECT ( --对象名 gid NUMBER(10), --对像字段. gname VARCHAR2(20) ); 创建对象数组: CREATE OR REPLACE TYPE test_TABLE AS TABLE OF Test_Type; --te

BrandoLv 580

oracle调用存储过程传递list参数

(一)jdbc连接:--第一步,创建数据库对象  CREATE OR REPLACE TYPE param_object is object(    configId nvarchar2(64),    evaluateScore number(18,2),    evaluateLevel nvarchar2(64)  );       --第二步,创建数据库list并且与数据库对象挂关系  c...

tyjlearning的博客 9814

使用mybatis给Oracle存储过程传List,数组类型.

0.不废话.直接上过程 1.因为Oracle本身是有数组概念的.我们直接使用Oracle中的数组,但需要先创建类型,varray也就是Oracle的数组,100指定长度,of后面指定类型, CREATE OR REPLACE TYPE tables_array AS VARRAY(100) OF VARCHAR2(32); 2.第二步,创建一个表,进行测试数据, drop table ...

Dream的博客 7488

oracle存储过程常用技巧

我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等1.存储过程结构1.1 第一个存储过程 createorreplaceprocedureproc1( p_para1varchar2, ...

dht91597的博客 149

Oracle存储过程常用技巧

存储过程的结构是非常简单的,我们在这里除了学习存储过程的结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等 1.存储过程结构 1.1第一个存储过程 create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 i...

学Java,找哪吒 1452
上一篇: Linux下如何批量转码txt
下一篇: error page配置方法
disablebb
博客等级 码龄18年 5粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值