用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;
}
}
相关推荐
【全网最全最详细】智能体提示词prompt教程
定义:提示词是用户输入给AI模型(如ChatGPT、MidJourney等)的指令或问题,用于引导模型生成特定类型的输出。它是用户与AI交互的核心媒介。作用:提示词的质量直接影响AI输出的准确性和相关性。好的提示词能明确任务边界、减少歧义,并激发模型的创造力。提示词就是“给AI下指令的说明书”——越清楚、越具体,AI干得越好!帮你更快、更准地拿到想要的结果,不用和AI“猜谜语”。
jdbc的使用,如何传参查询,如何关闭连接、对象、结果集,如何将查询的数据封装进对象集合
jdbc的使用,如何传参查询,如何关闭连接、对象、结果集,如何将查询的数据封装进对象集合
FPGA人脸识别检测(先获取人脸图像以及灰度二值化)
由于图片有空洞等缺陷,所以后面要进行中值滤波、腐蚀、膨胀等算法处理,然后再对人脸进行框选,最后显示出来。最终的成像应该是下面这样的。(后面有时间再接着做哈哈哈)5、通过modelsim将操作后的图片数据写入gray_img.txt里面后,用matlab将txt转成图片。1、先用matlab将图片转换成txt数据,代码如下。读取图片的方式按照博客咸鱼里的方式来做,如下。2、FPGA读取txt数据。4、FPGA顶层模块及仿真。3、FPGA灰度二值化。
JDBC常用参数解析
Druid 基本配置 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this); jdbcUrl:连接地址,如:mysql : jdbc:mysql://127.0.0.1:3306/test-db; username:用户名; pa...
uniapp 使用摄像头 live-pusher (APP)
uniapp 中开发 app 时使用live-pusher踩过的坑
DPO(Direct Preference Optimization)直接偏好优化
本文介绍了DPO(直接偏好优化)方法,该方法通过简化传统的RLHF(基于人类反馈的强化学习)流程,直接利用人类偏好数据进行模型优化。DPO的核心思想是跳过奖励模型训练和强化学习交互步骤,通过数学推导将优化目标转化为仅与策略概率分布相关的形式。推导表明最优策略与奖励模型之间存在显式关系,从而可以构建直接优化策略的损失函数。与RLHF相比,DPO简化了训练流程,提高了工程实现稳定性,同时保持了同等效果。
JDBC 所有参数说明(最全)
通过 JDBC 源码国际化配置文件 LocalizedErrorMessages.properties 找到对所有配置的说明
通义千问语言模型Qwen2.5架构详解
此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。
JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)
文章目录前言数据的持久化Java数据存储技术JDBC介绍JDBC体系结构获取数据库链接Driver接口加载注册JDBC驱动获取数据库链接数据库链接方式(实例)方式一:代码中显示出现了第三方数据库API(不推荐)方式二:代码中不体现第三方数据库API(推荐)PreparedStatement实现CRUD操作两种技术PreparedStatement介绍使用Statement操作数据表的弊端(不推荐)PreparedStatement的使用PreparedStatement介绍PreparedStatement
基于Simulink和Control System Toolbox的线控转向(Steer-by-Wire)系统设计
通过上述步骤,我们成功设计并实现了基于 Simulink 和 Control System Toolbox 的线控转向(Steer-by-Wire)系统。该系统能够接收来自方向盘的角度指令,经过控制器处理后,驱动转向执行器(如电动机),实现对车辆前轮转向角度的精确控制。通过虚拟场景仿真、硬件在环测试和实车测试,验证了系统的响应速度、控制精度、车辆稳定性和实时性能,并通过参数优化进一步提升了系统的性能。
面向口齿不清者的语音识别新突破:用大模型拯救“听不懂”的声音
面向构音障碍患者的语音识别新突破:大语言模型显著提升识别准确率 国际语音研究团队在Interspeech 2025发表最新成果,通过将大语言模型(LLM)融入语音识别系统,显著改善了对构音障碍(dysarthria)患者语音的识别效果。研究表明: 传统语音识别(如CTC模型)对构音障碍语音的词错误率(WER)高达50-54%,Whisper模型降至38-40%。 引入LLM解码器后,BART模型将WER降至30-32%,而Whisper-Vicuna组合更将WER降低至21-26%。 关键优势:LLM能有效
KingbaseES V8 JDBC调用array参数存储过程
之前遇到某项目迁移Oracle至KingbaseES V8, 应用为java开发,用到了java调用存储过程批量插入数据,数据以数组的形式通过存储过程的入参传入,kingbase官方文档没有发现关于java操作数组参数的相关文档及用例,本人摸索调试成功java调用带数组类型入参的存储过程,分享给大家。
流媒体之LL-HLS 低延时HLS协议
LL-HLS协议通过扩展了HLS协议,为实时直播场景提供了更丰富的功能,如延迟控制、播放列表增量更新、阻止播放列表重新加载等。同时客户端可以更灵活地控制播放列表的加载和播放,以适应各种场景和需求。LL-HLS在直播中的延时可以控制在3s内, 但是即使这样, 还是不如RTMP, RTSP等协议的实时性。
用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. 创建存...
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
最新的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 控制[手册]
如何用JDBC给存储过程传递数组类型的参数
A . 嵌套表 1. 声明数组类型 create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 2. 创建存储过程 -- 该例子存储过程是在包中创建的,包名 arraydemo procedure testArray(resNumber in tab_array,pr...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
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...
8215



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



