java中呼叫儲存過程並傳遞list集合引數的方法
sql:
CREATE OR REPLACE TYPE test as object(
FID NUMBER,
NUM nVARCHAR2(30),
TESKID NUMBER,
CID NUMBER,
USERCODE nVARCHAR2(100)
)
CREATE OR REPLACE TYPE test_list as table of test
CREATE OR REPLACE PROCEDURE inserttenumber(
v_rec_class_list IN test_list)is
v_rec_class test;
v_count number;
begin
v_count := v_rec_class_list.count;
for i in 1..v_count
loop
v_rec_class:=v_rec_class_list(i);
insert into te_number(id,fid,NUM,teskid,STATE,cid,user_code)values(tenumberseq.nextval,v_rec_class.fid,v_rec_class.NUM,v_rec_class.teskid,'-2',v_rec_class.cid,v_rec_class.USERCODE);
end loop;
end inserttenumber;
java
Connection con = null;
CallableStatement cstmt = null;
try {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext-resource.xml");
DataSource datasource=(DataSource)applicationContext.getBean("dataSource");
List list = new ArrayList();
for (int i = 0; i < sheets.getRows(); i++) {
Cell c01 = sheets.getCell(1, i);
Cell c00 = sheets.getCell(0, i);
if(!"".equals(c01.getContents())&&!"".equals(c00.getContents())){
total++;
Object[] record = new Object[5];
record[0] = tn.getFid();
record[1] = c01.getContents();
record[2] = tn.getTeskId();
record[3] = tn.getCid();
record[4] = c00.getContents();
list.add(record);
}
if(i%1000==0){
con=(Connection) DataSourceUtils.getConnection(datasource);
System.out.println(con.hashCode()+"======="+list.size());
tnManager.test1(list,con);
list.clear();
System.out.println(con.isClosed());
}
}
System.out.println("============"+list.size());
con=(Connection) DataSourceUtils.getConnection(datasource);
tnManager.test1(list,con);
con.close();
tt.setCount(total);
md.addObject("total",total);
md.addObject("error",tf.getCount()-total);
} catch (Exception e) {
System.out.println("=============新增任務,匯入號碼檔案錯誤!!!");
e.printStackTrace();
}
closeExcel(rwb);
===================
public void test1(List list,Connection con) throws Exception{
StructDescriptor recDesc = StructDescriptor.createDescriptor("TEST", con);
ArrayList<STRUCT> pstruct = new ArrayList<STRUCT>();
System.out.println(new Date());
for (int i = 0;i<list.size();i++) {
Object[] record = (Object[])list.get(i);
STRUCT item = new STRUCT(recDesc, con, record);
pstruct.add(item);
}
ArrayDescriptor tabDesc = ArrayDescriptor.createDescriptor("TEST_LIST", con);
ARRAY vArray = new ARRAY(tabDesc, con, pstruct.toArray());
System.out.println(new Date());
CallableStatement cstmt = null;
cstmt = (CallableStatement) con.prepareCall("{call inserttenumber(?)}");
System.out.println(new Date());
cstmt.setArray(1, vArray);
System.out.println(new Date());
cstmt.execute();
System.out.println(new Date());
con.commit();
cstmt.close();
con.close();
System.out.println(new Date()+"==========執行完成"+con.isClosed());
}
相關推薦
java中呼叫儲存過程並傳遞list集合引數的方法
sql: CREATE OR REPLACE TYPE test as object( FID NUMBER, NUM nVARCHAR2(30), TESKID NUMBER, CID NUMBER, USERCODE nVARCHAR2(100) ) CREA
Java中呼叫儲存過程 -- Mybatis
Java中呼叫儲存過程 -- Mybatis public interface XXXMapper { /* * 1.沒有出參(返回值,void) 返回不了值,返回值都封裝在入參的實體類或Map中(引用型別) * 原因:存過的入參、出參都在java呼叫的入參中
在Java中呼叫儲存過程(詳細)
本文闡述了怎麼使用DBMS儲存過程。我闡述了使用儲存過程的基本的和高階特性,比如返回ResultSet。本文假設你對DBMS和JDBC已經非常熟悉,也假設你能夠毫無障礙地閱讀其它語言寫成的程式碼(即不是Java的語言),但是,並不要求你有任何儲存過程的程式設計經歷。 儲
在phpmyadmin中建立儲存過程並在php中呼叫
ADDTIME (date2 ,time_interval ) //將time_interval加到date2 CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //轉換時區 CURRENT_DATE ( ) //當前日期 CURRENT_TIME ( ) //當前時間 CURR
JAVA中對儲存過程的呼叫方法
一:Java如何實現對儲存過程的呼叫: A:不帶輸出引數的 ---------------不帶輸出引數的---------------------------------- create procedure getsum @n int =0<--此處為引
Mybatis 呼叫儲存過程 並返回單/多結果集的情況
返回單結果集的情況: 引用: https://blog.csdn.net/a9529lty/article/details/24401423 儲存過程示例: create or replace procedure Fsp_Plan_CheckPrj(v
在PL/SQL中呼叫儲存過程--oracle
在oracle10中寫好了儲存過程,程式碼如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int,
oracle中呼叫儲存過程
儲存過程的呼叫 增加,修改,刪除的儲存過程呼叫 帶輸入引數的儲存過程呼叫 帶輸出引數的儲存過程的呼叫:此處以登入成功還是失敗為例.返回0 或者1 增加,修改,刪除的儲存過程呼叫
shell中呼叫儲存過程
將需要呼叫的儲存過程寫在檔案tasklist.txt中 下面將批量執行檔案列表中的儲存過程 #!/bin/ksh if [ $# -eq 0 ];then echo "no paramer please input one paramer A OR B" exit fi e
oracle 函式中呼叫儲存過程
專案中開發了一個儲存過程來給報表提供資料來源,而程式業務邏輯中需要有一個對該資料來源進行判斷的功能,開始是使用拼接sql的方式在儲存過程中對應sql的外面包裝一層來進行處理,但是覺得這種方式拼接的sql太長,而且以後業務邏輯改變要同時修改儲存過程和程式碼,容易發生遺漏,
python 使用 pymssql 呼叫儲存過程並讓他返回值
眾所周知, pymssql 庫並不支援(暫時?)呼叫儲存過程,只能使用原生的sql 語句讓其呼叫。 這樣一來如果需要讓pymssql呼叫儲存過程並讓其返回值 , 顯然return語句是不能用了, 但是我們可以使用 select 語句讓其返回值。
ASP中呼叫儲存過程、語法、寫法-sql server資料庫,return,output
ASP與儲存過程(Stored Procedures)的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜
CI框架中呼叫儲存過程報錯:Commands out of sync; you can't run this command now
專案開發中碰到的問題,資料庫寫了個儲存過程,在ci框架中呼叫此儲存過程,碰到了問題,接觸ci框架時間不長,摸索了好半天,才終於解決。 問題如下: $common = $this->db->query("call welcome_common_data
Java程式碼呼叫儲存過程和儲存方法
準備一個oracle 的JDBC jar 包:ojdbc14_11g.jar 首先找到你的 oracle 安裝位置,例如: 1.建立一個JDBC資料庫連線工具類: package com.test
MyBatis中呼叫儲存過程和函式
一.呼叫儲存過程 1.首先在資料庫中定義儲存過程,定義的儲存過程的程式碼如下: //定義儲存過程create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2) as begin
在python中呼叫儲存過程
儲存過程一般來說在資料庫中直接定義,然後在python中呼叫 新建儲存過程: 執行 結果符合預期,接下來在python呼叫它 import pymysql conn = pymysql.connect(host='127.0.0.1', u
資料庫儲存過程,事務 jfinal中呼叫儲存過程,事務
mysql DELIMITER $$ CREATE PROCEDURE `student`.`ceshi`(n INT,j CHAR(1)) BEGIN IF j = 'h' THEN SELECT * FROM blog
Java執行Oracle儲存過程並接收返回值
Java執行Oracle儲存過程並接收多個返回值(集合/數值) Java程式碼: package com.pure.util; import java.sql.Connection; import java.sql.DriverManager; import java.s
C#中呼叫儲存過程
1、沒有引數沒有返回值 2、有引數沒有返回值 3、有引數有返回值 下面就這幾種情況分別舉例:1、沒有引數沒有返回值,象這種情況最簡單。 儲存過程 USE Northwind CREATE PROC novaluenoparameter AS SE
在java中使用儲存過程
以前用的是Statement 和 PreparedStatement 呼叫儲存過程就用到 CallableStatement cstmt =conn.prepareCall("call p(?,?,?,?)"); 宣告 一個叫p的儲存過程,需要4個引數 其中1,2為輸入引數