用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;
}
}
相关推荐
【STM32】433MHz OOK信号软解码实战:从EV1527协议到嵌入式实现
本文详细介绍了基于STM32微控制器实现433MHz OOK信号软解码的完整实战过程。文章从EV1527协议解析入手,重点阐述了利用STM32的GPIO和定时器进行信号采样、脉宽还原、同步头识别以及数据位判决的核心算法,并提供了对抗无线干扰的容错优化策略,帮助开发者深入理解并掌握低成本无线通信的嵌入式实现方案。
jdbc的使用,如何传参查询,如何关闭连接、对象、结果集,如何将查询的数据封装进对象集合
jdbc的使用,如何传参查询,如何关闭连接、对象、结果集,如何将查询的数据封装进对象集合
Android 12 HAL开发避坑实录:手把手教你用AIDL在Native层实现一个可开机自启动的Service
本文详细介绍了在Android 12 HAL开发中,如何通过AIDL在Native层实现一个可开机自启动的Service。从环境准备、AIDL接口定义、服务实现到VINTF集成与SELinux策略配置,提供了完整的实战指南,帮助开发者避开常见陷阱,提升开发效率。
JDBC常用参数解析
Druid 基本配置 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this); jdbcUrl:连接地址,如:mysql : jdbc:mysql://127.0.0.1:3306/test-db; username:用户名; pa...
burpsuite抓取ios数据包
1:首先在burpsuite中设置 添加proxy listeners 2:电脑开热点,手机连接,把代理设为电脑的ip和代理的端口 3:在Safari浏览器中打开网址http://burp下载证书 4:打开设置->通用->描述文件与设备管理 5:设置->通用->关于本机->证书信任设置 之后就可以正常抓包了 ...
vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复
本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。
JDBC 所有参数说明(最全)
通过 JDBC 源码国际化配置文件 LocalizedErrorMessages.properties 找到对所有配置的说明
【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码
(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。
JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)
文章目录前言数据的持久化Java数据存储技术JDBC介绍JDBC体系结构获取数据库链接Driver接口加载注册JDBC驱动获取数据库链接数据库链接方式(实例)方式一:代码中显示出现了第三方数据库API(不推荐)方式二:代码中不体现第三方数据库API(推荐)PreparedStatement实现CRUD操作两种技术PreparedStatement介绍使用Statement操作数据表的弊端(不推荐)PreparedStatement的使用PreparedStatement介绍PreparedStatement
多模型动态路由(Fusion):从“算力霸权”到“架构分权”的工程范式转型
多模型动态路由(Multi-Model Dynamic Routing)是指在多个大语言模型之间,根据请求特征、资源约束和业务目标,动态选择最优模型或模型组合的技术范式。传统网关擅长管理请求流量,但不理解“任务类型”。而AI路由层需要对每个请求进行语义理解、能力匹配和成本评估。从“算力霸权”到“架构分权”,这不是技术的线性演进,而是工程范式的根本转型。过去三年,开发者的核心能力是“选对模型”——在GPT、Claude、Gemini之间做出正确选择。
在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量
摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。
KingbaseES V8 JDBC调用array参数存储过程
之前遇到某项目迁移Oracle至KingbaseES V8, 应用为java开发,用到了java调用存储过程批量插入数据,数据以数组的形式通过存储过程的入参传入,kingbase官方文档没有发现关于java操作数组参数的相关文档及用例,本人摸索调试成功java调用带数组类型入参的存储过程,分享给大家。
量子化学仿真软件:VASP_(7).表面与界面性质模拟
在量子化学仿真软件领域,表面与界面性质的模拟是研究多相催化、表面反应、材料科学等领域的关键工具。VASP(Vienna Ab Initio Simulation Package)作为一种广泛使用的密度泛函理论(DFT)计算软件,提供了强大的功能来模拟表面与界面的性质。本节将详细介绍如何使用VASP进行表面与界面性质的模拟,包括模型构建、输入文件准备、计算设置、结果分析等步骤。
用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. 创建存...
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
最新的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...
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...
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...
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...
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...
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
oracle调用存储过程传递list参数
(一)jdbc连接:--第一步,创建数据库对象 CREATE OR REPLACE TYPE param_object is object( configId nvarchar2(64), evaluateScore number(18,2), evaluateLevel nvarchar2(64) ); --第二步,创建数据库list并且与数据库对象挂关系 c...
使用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 ...
oracle存储过程常用技巧
我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等1.存储过程结构1.1 第一个存储过程 createorreplaceprocedureproc1( p_para1varchar2, ...
Oracle存储过程常用技巧
存储过程的结构是非常简单的,我们在这里除了学习存储过程的结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等 1.存储过程结构 1.1第一个存储过程 create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 i...
783



被折叠的 条评论
为什么被折叠?



