1. 程式人生 > >java中呼叫儲存過程並傳遞list集合引數的方法

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為輸入引數