当前位置:首页 » 存储配置 » java存储过程数组参数

java存储过程数组参数

发布时间: 2023-04-29 02:54:15

Ⅰ 如何给存储过程,传一个数组参数

这个是我自己写的一个例子,你看看:在命令窗口执行以下语句,创建自定义类型NESTEDARRAY。;在存储过程中使用自定义类型NESTEDARRAY。PROCEDUREGET_ARR_RESULT(INPUTARRAYINNESTEDARRAY,AROUTNESTEDARRAY)ISBEGINAR:=NESTEDARRAY();FORIIN1..INPUTARRAY.COUNTLOOPAR.EXTEND;AR(I):=I||INPUTARRAY(I);ENDLOOP;ENDGET_ARR_RESULT;java代码:importjava.sql.Connection;importjava.sql.SQLException;importoracle.jdbc.OracleCallableStatement;importoracle.jdbc.OracleTypes;importoracle.sql.ARRAY;importoracle.sql.ArrayDescriptor;importoracle.sql.Datum;/***Java获取Oracle存储过程返回自定义类型*@authorluckystar**/{/***@paramargs*/publicstaticvoidmain(String[]args){Connectioncon=null;OracleCallableStatementocs=null;Stringsql="{calltest.GET_ARR_RESULT(?,?)}";try{con=DBUtil.dbUtil.getConnection();ocs=(OracleCallableStatement)con.prepareCall(sql);String[]params={“10001”,”10003”};ArrayDescriptorarrayDesc=ArrayDescriptor.createDescriptor("NESTEDARRAY",con);ARRAYinputArray=newARRAY(arrayDesc,con,params);ocs.setARRAY(1,inputArray);ocs.registerOutParameter(2,OracleTypes.ARRAY,"NESTEDARRAY");ocs.execute();ARRAYarray=ocs.getARRAY(2);Datum[]datum=array.getOracleArray();for(inti=0;i

Ⅱ java 中类创建数组怎么用怎么传参数详细点哦,举个小例子也行呀!

public class TestArray{
public static void main(String args[]){
int[] array={1,2,3};
prt(array);//用数组名传递,prt()方法要声明雹盯为static的才可以这样调用
prt1(array[0],array[1],array[2]);//直接传递数组中储存的值
}
public static void prt(int a[]){//整型的数组作形参
System.out.println(a[0]);//卖迟输出显示数组第一个值
}
public void prt1(int a,int b,int c){
System.out.println(a);//输出显示源配和数组第一个值
}
}

Ⅲ JAVA调用存储过程,Oracle自定义类型作参数怎么写法

1. 存储过程以及类型定义如下:

--The array in oracle
CREATE OR REPLACE TYPE idArray AS TABLE OF VARCHAR2(20);

--package header
CREATE OR REPLACE PACKAGE Lib_Package AS
PROCEDURE Book_Check_Procere(ids IN idArray, exist OUT NUMBER);
END Lib_Package;

--package body
CREATE OR REPLACE PACKAGE BODY Lib_Package AS

PROCEDURE Book_Check_Procere( ids IN idArray, exist OUT NUMBER) AS v_Index BINARY_INTEGER; BEGIN v_Index:= ids.FIRST; LOOP SELECT COUNT(*) INTO exist FROM Lib_Duplicate WHERE status='Lent' AND book_id=ids(v_Index); EXIT WHEN v_Index=ids.LAST OR exist>0; v_Index:= ids.NEXT(v_Index); END LOOP;END Book_Check_Procere;
END Lib_Package;

2.在Java中调用上面的存储过程
(1) 在Oracle中定义数组类型idArray (2) 在java构造数组并转换成Oracle中定义的数组类型,调用存储过程

/** * 当要删除图书时,检查是否仍然有图书复本处于借出状态 */ public boolean checkBookStatus(String[] bookIds) throws DataAccessException {
boolean flag = false; Connection conn = null; OracleCallableStatement cstmt = null; ArrayDescriptor desc = null; ARRAY bookIdArray = null; int count = 0; String sql = "{call LIB_PACKAGE.Book_Check_Procere(?,?)}";
DbDriverManager dbManager = DbDriverManager.getInstance(); conn = dbManager.getConnection(Constants.DATABASE);
try { cstmt = (OracleCallableStatement) conn.prepareCall(sql);
//定义oracle中的数组类型 desc = ArrayDescriptor.createDescriptor("IDARRAY", conn); bookIdArray = new ARRAY(desc, conn, bookIds);
cstmt.setObject(1, bookIdArray, oracle.jdbc.OracleTypes.ARRAY); cstmt.registerOutParameter(2, Types.INTEGER); cstmt.execute(); count = cstmt.getInt(2);
log.info(this.getClass() + ".checkBookStatus: count = " + count);
DbOperHelp.closeStatement(this.getClass(), cstmt); DbOperHelp.closeConnection(this.getClass(), conn); } catch (SQLException e) {
log.error(this.getClass() + ".checkBookStatus-->SQLException: " + e.getMessage()); DbOperHelp.closeStatement(this.getClass(), cstmt); DbOperHelp.closeConnection(this.getClass(), conn); throw new DataAccessException( "When check the books, there is a SQLException: " + e.getMessage(), e.getCause()); }
if (count > 0) {
flag = true; }
return flag; }

Ⅳ java函数中怎么用数组做参数

java函数中用数组做参数的步骤:

  1. 在main函数里面加这段话:System.out.println("arg is"+args[0]),然后看输出:
    This is a simple Java program
    arg is XX。

  2. 在运行时输入java test xx yy zz,并且在main函数里面加这段话:System.out.println("arg is"+args[0]+" "+args[1]+" "+args[2]),然后看输出:
    This is a simple Java program
    arg is xx yy zz。

java函数 :

  1. 是一种特殊的函数。其主要功能是用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

  2. 构造函数与类名相同,可重载多个不同的构造函数。

  3. 在JAVA语言中,构造函数与C++语言中的构造函数相同,JAVA语言中普遍称之为构造方法。

Ⅳ java中 数组可以作为形式参数传递到调用的方法中吗要怎么操作

可以,操作代码如下:

public class ArrTest{

public static void doTest(String[] args){

for(int i=0;i<args.length;i++){

System.out.println(args[i]);

}

}

public static void main(String[] args){

String[] testArr = {"a","b","c","d"};

ArrTest.doTest(testArr );

}

}

(5)java存储过程数组参数扩展阅读:

把数组作为参数传入一个方法,在该方法中对数组进行一些操作:如果仅仅是插入数据项等一般操作,那么该操作会影响到数组本身;反之,如调整数组大小、对数组赋值等操作,则对数组本身没有影响。

例子:

public class Tester {<br data-filtered="filtered">

public static void counter(int count) {<br data-filtered="filtered">

count = 2;<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

public static void changeA1(int[] ints) {<br data-filtered="filtered">

int[] temp = { 4, 5, 6 };<br data-filtered="filtered">

ints = temp;<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

public static void changeA2(int[] ints) {<br data-filtered="filtered">

ints[0] = 4;<br data-filtered="filtered">

ints[1] = 5;<br data-filtered="filtered">

ints[2] = 6;<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

public static void main(String[] args) {<br data-filtered="filtered">

// Output: 1<br data-filtered="filtered">

// 基本数据类型没有改变。<br data-filtered="filtered">

int count = 1;<br data-filtered="filtered">

counter(count);<br data-filtered="filtered">

System.out.println("count: " + count);<br data-filtered="filtered">

<br data-filtered="filtered">

<br data-filtered="filtered">

int[] ints = { 1, 2, 3 };<br data-filtered="filtered">

<br data-filtered="filtered">

// Output: 1, 2, 3<br data-filtered="filtered">

// 对数组赋值,不会改变原始数组。<br data-filtered="filtered">

changeA1(ints);<br data-filtered="filtered">

for (int i = 0; i < ints.length; i++) {<br data-filtered="filtered">

System.out.print(ints[i] + " ");<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

// Output: 4, 5, 6<br data-filtered="filtered">

// 可以对数组插入新的数据项。<br data-filtered="filtered">

System.out.println();<br data-filtered="filtered">

changeA2(ints);<br data-filtered="filtered">

for (int i = 0; i < ints.length; i++) {<br data-filtered="filtered">

System.out.print(ints[i] + " ");<br data-filtered="filtered">

}<br data-filtered="filtered">

}<br data-filtered="filtered">

}

Ⅵ java中数组是怎么作为函数参数进行传递的

举个例子和你说。
传递数组参数:
1. 传递数组
要传递数组到方法里,只要指明传入的参数是一个数组即可。
例:
public class ArrayDemo //定义主类
{
public static void main(String args[])
{
int a[]={8,23,7,6,9,23}; //定义一维数组
ArrayDemo min=new ArrayDemo (); //创建对象
min.arrayMin(a); //将一维数组a传入least()方法
}
public void arrayMin(int array[]) //参数array[]接受一维整形数组
{
int temp=array[0];
for(int i=0;i<array.length;i++)
if(temp>array[i])
temp=array[i];
System.out.println("最小的数为:"+temp);
}
}
从该例中可以看出,如果要将数组传递到方法里,只需在方法名后的括号内写上数组的名即可。二维数组的传递与一维数组相似,在需在方法里声明传入的参数是一个二维数组。

Ⅶ 如何向存储过程传递一个数组参数

方法一 分割

例:通过SQL Server存储过程传送数组参数删除多条记录

eg. ID 值为'1,2,3' 以下存储过程就是删除表中id号为1,2,3的记录:

CREATE PROCEDURE DeleteNews
@ID nvarchar(500)
as
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1

while (@PointerPrev < LEN(@ID))
Begin
Set @PointerCurr=CharIndex(',',@ID,@PointerPrev)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING(@ID,@PointerPrev,@PointerCurr-@PointerPrev) as int)
Delete from News where ID=@TID
SET @PointerPrev = @PointerCurr+1
End
else
Break
End
--删除最后一个,因为最后一个后面没有逗号,所以在循环中跳出,需另外再删除
set @TId=cast(SUBSTRING(@ID,@PointerPrev,LEN(@ID)-@PointerPrev+1) as int)
Delete from News where ID=@TID
GO

这个方法麻烦不?于是又有另外一种方法——临时表

方法二 Table对象

传3个参数,都是数组形式还有时间类型用存储过程更新

@Oid = 1,2,3,4

@Did = 111,222,333,444

@DateArr = '2007-1-1,2007-1-2,2007-1-3,2007-1-4'

CREATE proc Test999

@Oid nvarchar(1000) --ID1

,@Did nvarchar(1000) --ID2

,@DateArr nvarchar(1000) --日期

AS

DECLARE @id1s varchar(8000), @id2s varchar(8000), @dates varchar(8000)

set @id1s=@Oid

set @id2s=@Did

set @dates = @DateArr

-- 调用函数实现处理

SELECT @id1s=@id1s, @id2s=@id2s,@dates = @dates

UPDATE A SET terminate_time = B.dt

FROM [Table] A,(

SELECT

id1 = CONVERT(int, Desk_id.value),

id2 = CONVERT(int, room_id.value),

dt = CONVERT(datetime, terminate_time.value)

FROM dbo.f_splitstr(@id1s) Desk_id, dbo.f_splitstr(@id2s) room_id, dbo.f_splitstr(@dates) terminate_time

WHERE Desk_id.id = room_id.id

AND Desk_id.id = terminate_time.id

) B

WHERE A.Desk_id = B.ID1 AND A.room_id = B.ID2

GO这个还用到一个函数f_splitstr

CREATE FUNCTION dbo.f_splitstr(

@str varchar(8000)

)RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))

AS

BEGIN

DECLARE @pos int

SET @pos = CHARINDEX(',', @str)

WHILE @pos > 0

BEGIN

INSERT @r(value) VALUES(LEFT(@str, @pos - 1))

SELECT

@str = STUFF(@str, 1, @pos, ''),

@pos = CHARINDEX(',', @str)

END

IF @str > ''

INSERT @r(value) VALUES(@str)

RETURN

END

Ⅷ java函数中怎么用数组做参数

String[] args 这个字符串数组是保存运行main函数时输入的参数的,例如main函数所在的类名为test 那么你在cmd运行 java test a b c 时,args[0] = a ,args[1]=b, args[2]=c 你就可以在你的程序中调用你输入的这些变量了。

(1)args[]不就是那个字符串This is a simple Java program嘛!
-------完全不是的,理解不对。运行的时候加个参数,比如 java test XX。然后在main函数里面加这段话:System.out.println("arg is"+args[0]),然后看看输出是不是这个:
This is a simple Java program
arg is XX

总结:不带String args[]的main函数和带String args[]的main函数,本质上已经不是同一个函数了,java 本身不存在不带String args[]的main函数。

Ⅸ 在java中怎样执行sqlserver的存储过程,带输入参数和输出参数,举个例子

用java调用:
class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); //加载驱动
Connection con=DriverManager.getConnection(\"Jdbc:Odbc:test\",\"sa\",\"\"); //获得连接
String call=\"{call proc_select(?,?)};\" //调用语句
CallableStatement proc=con.preparecall(call); //调用存储过程
proc.setString(1,\"12345678\"); //给输入参数传值
proc.registerOutParameter(2,Type.varchar); //声明输出参数是什么类型的
proc.execute(); //执行
String address=proc.getString(2); //获得输出参数

Ⅹ 在Java中数组作为方法的参数的一个问题。

  1. public static int add(int[] a)和public static int add(int a[])中的参数档租定义是相同的,都表示int类型的不定长数组,即数组的长度不同。

  2. ublic static int add(int...a)中的int...a在java中称作可变参数,意思是这个add方法的参数是不固定的.相关特性如下,

  3. Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

  4. 可变参数的特点:

    (1)只能出现在参数列表的最后;

    (2)...位于变量类型和变量名之间橡裤,前后有无空格都可以;

    (3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

  5. publicclassVarable{
    publicstaticvoidmain(String[]args){
    System.out.println(add(2,3));
    System.out.println(add(2,3,5));
    }
    publicstaticintadd(intx,int...args){
    intsum=x;
    for(inti=0;i<args.length;i++){
    sum+=args[i];
    }
    returnsum;
    }
  6. 可以这样认为,可变参数只是数组的一种行如兆增强型,适用于工具类的封装,比如java的层Dbutl工具类,使用PreparedStatement进行预编译sql语句时,由于占位符的数量未知,我们就可以使用可变参数来设置占位符的数量
热点内容
androidsdk功能 发布:2025-02-12 03:43:07 浏览:86
阿里云服务器可以访问外网吗 发布:2025-02-12 03:42:20 浏览:879
脚本的生命周期顺序 发布:2025-02-12 03:37:28 浏览:368
素数加密 发布:2025-02-12 03:37:27 浏览:802
ar源码 发布:2025-02-12 03:32:04 浏览:655
阅图文件夹 发布:2025-02-12 03:30:22 浏览:761
旧手机存储资料 发布:2025-02-12 03:29:42 浏览:471
linux使用git 发布:2025-02-12 03:28:56 浏览:404
编程培训有那些 发布:2025-02-12 03:28:52 浏览:523
如何导入安卓通讯录到苹果 发布:2025-02-12 03:10:31 浏览:23