日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程

發(fā)布時間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/dutguoyi/article/details/1879416

為了減少連接Oracle數(shù)據(jù)庫的數(shù)量,需要將多條數(shù)據(jù)作為變量一次傳入Oracle的存儲過程中。方法如下:

步驟一:定義對象類型。?

CREATE?TYPE?department_type?AS?OBJECT?(
DNO?
NUMBER?(10
),
NAME?
VARCHAR2?(50
),
LOCATION?
VARCHAR2?(50
)
);

步驟二:定義一個對象類型的數(shù)組對象。

CREATE?TYPE?dept_array?AS?TABLE?OF?department_type;

步驟三:定義存儲過程來插入數(shù)據(jù)。

CREATE?OR?REPLACE?PACKAGE?objecttype?AS
??
PROCEDURE?insert_object?(d?dept_array);
END
?objecttype;

CREATE?OR?REPLACE
?PACKAGE?BODY?objecttype
AS

PROCEDURE?insert_object?(d?dept_array)
AS

BEGIN
FOR?i?IN?d.FIRST..d.LAST
LOOP
INSERT?INTO
?department_teststruct
VALUES
?(d(i).dno,d(i).name,d(i).location);
END
?LOOP;
END
?insert_object;?
END
?objecttype;

步驟四(可選步驟,即可以不做):定義一個Java class來映射對象中類型。
步驟五:定義Java方法來調(diào)用存儲過程。?

import?java.sql.Connection;?
import
?java.sql.DriverManager;
import
?oracle.jdbc.OracleCallableStatement;
import
?oracle.sql.ARRAY;
import
?oracle.sql.ArrayDescriptor;
import
?oracle.sql.STRUCT;
import
?oracle.sql.StructDescriptor;

public?class?TestStruct?...
{
????
public?static?void
?main(String[]?args)
????
...
{
????????????sendStruct();
????}

????
public?static?void?sendStruct()?
????
...
{
????????Connection?dbConn?
=?null
;
????????
try...
{????
????????????Object[]?so1?
=?...{"10","Accounts","LHR"}
;?
????????????Object[]?so2?
=?...{"20","HR","ISB"}
;?
????????????OracleCallableStatement?callStatement?
=?null
;?
????????????Class.forName(
"oracle.jdbc.driver.OracleDriver"
);
????????????dbConn?
=?DriverManager.getConnection("jdbc:oracle:thin:@ServerName:Port:ORa",?"UserName",?"Password"
);
????????????StructDescriptor?st?
=?new?StructDescriptor("DEPARTMENT_TYPE"
,dbConn);
????????????STRUCT?s1?
=?new
?STRUCT(st,dbConn,so1);
????????????STRUCT?s2?
=?new
?STRUCT(st,dbConn,so2);
????????????STRUCT[]?deptArray?
=?...{s1,s2}
;
????????????ArrayDescriptor?arrayDept?
=?ArrayDescriptor.createDescriptor("DEPT_ARRAY"
,?dbConn);
????????????ARRAY?deptArrayObject?
=?new
?ARRAY(arrayDept,?dbConn,?deptArray);?
????????????callStatement?
=?(OracleCallableStatement)dbConn.prepareCall("{call?insert_object(?)}"
);
????????????((OracleCallableStatement)callStatement).setArray(
1
,?deptArrayObject);
????????????callStatement.executeUpdate();?
????????????dbConn.commit();
????????????callStatement.close();?
????????}
?
????????
catch(Exception?e)...
{?
????????????System.out.println(e.toString());
????????}

????}

}

jdbc:oracle:thin:??????????? --Oracle數(shù)據(jù)庫驅(qū)動標(biāo)識

ServerName:???????????????? --Oracle數(shù)據(jù)庫所有機(jī)器名或IP地址

1521:????????????????????????? ?--數(shù)據(jù)庫所使用的端口號

ORa???????????????????????????? --Oracle服務(wù)名???
?

注意事項:

1.?首先一個操作是手動連接Oracle建立對象,接下來的操作是通過JAVA程序建立數(shù)據(jù)庫連接來使用對象。如果兩個操作使用同一個用戶就沒有問題,如果是不同的用戶那么要確保第二個操作(即通過Java程序)的用戶有權(quán)限來操作第一個用戶建立的對象。第一個用戶為它添加權(quán)限的方法是:在每個對象中大家可以找到權(quán)限一項,找到對應(yīng)用戶添加執(zhí)行權(quán)限即可。而在程序中就需要做一些修改。存儲過程同理。 ???StructDescriptor?st?=?new?StructDescriptor("第一個UserName.DEPARTMENT_TYPE",dbConn); ????? ArrayDescriptor?arrayDept?=?ArrayDescriptor.createDescriptor("第一個UserName.DEPT_ARRAY",?dbConn); ????? callStatement?=?(OracleCallableStatement)dbConn.prepareCall("{call?第一個UserName.insert_object(?)}");

結(jié)果是Java中雖然只是一次執(zhí)行連接數(shù)據(jù)庫,但是卻一次插入兩條數(shù)據(jù)。希望能夠給尋找類似解決方案的兄弟姐妹提供一點幫助。有什么建議或者意見盡管留言,謝謝。

參考資料:

1. 大家可以在下面的鏈接中找到javadoc文件來進(jìn)行下載,這是一個非常有用的說明文檔,這次我主要用到了DriverManager.getConnection的定義方法。

http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101020.html

?

總結(jié)

以上是生活随笔為你收集整理的如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。