亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將空的sql數組發送到oracle過程中

將空的sql數組發送到oracle過程中

瀟湘沐 2023-07-19 15:01:29
我正在嘗試將 sql.Array 發送到過程中,但不知何故它在 oracle 過程內部變空。我的java代碼用數據填充sql.Array并嘗試將其發送到過程中。         oracle.jdbc.OracleConnection connection = (OracleConnection) JdbcConnection.getInstance().createConnection();            String [] name = new String[]{"20206643799002684001","20206643799002684001"};            ArrayDescriptor arrDec = ArrayDescriptor.createDescriptor("ARRAY_VARCHAR2",connection.unwrap(oracle.jdbc.OracleConnection.class));            Array arr = new ARRAY(arrDec,connection.unwrap(oracle.jdbc.OracleConnection.class),name);            OracleCallableStatement callableStatement = connection.prepareCall("{call bss_acc.ACC_STATEMENT(?,?,?,?)}");            callableStatement.setDate(1,date);            callableStatement.setDate(2,dateL);           ((OracleCallableStatement)callableStatement).setARRAY(3,arr);            callableStatement.setString(4,this.branchId);            callableStatement.execute();在程序中,我放置了日志,以便查看執行該程序后獲得的值。我總是得到在此過程中顯示的空數組元素。procedure ACC_STATEMENT(i_begin_date date,i_end_date date,i_ids array_varchar2,i_mfo varchar2)iso_ext_acc varchar2(20);o_beginRest number;o_endRest number;o_name varchar2(100);o_rest number;o_type varchar2(100);beginFOR i IN 1.. i_ids.count LOOPo_ext_acc := i_ids(i);-- testRAISE_ERROR(20000, 'o_ext_acc -' ||o_ext_acc);UPD 當我設置調試模式以查看 arr 發生了什么時,我注意到了這個數據。這意味著數組不從中獲取值,并且它顯示問號而不是它。
查看完整描述

2 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

經過兩天的搜索,主要問題是 datumnArray 是 ???。這意味著 oracld db 和 jdbc 與其字符集不匹配。添加此代碼后。


 String s1 = new String(account.get(0).getBytes(), Charset.forName("ISO-8859-1"));

                String [] name = new String[]{s1};

                //oracle.sql.ArrayDescriptor arrayDescriptor = new ArrayDescriptor("ARRAY_VARCHAR2",connection);

                oracle.sql.ARRAY a = connection.createARRAY("ARRAY_VARCHAR2", name);

http://img1.sycdn.imooc.com//64b78a75000139cf05980487.jpg

并將這個庫添加到maven中


<dependency>

        <groupId>com.oracle</groupId>

        <artifactId>orai18n</artifactId>

        <version>11.1.0.7.0</version>

    </dependency>

這對我有用。我認為他們都是解決問題的關鍵。下面的圖片開頭。

http://img1.sycdn.imooc.com//64b78a810001b3ba05940484.jpg

查看完整回答
反對 回復 2023-07-19
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

使用oracle.sql.ARRAYandoracleConnection.setARRAY()而不是java.sql.Arrayand javaConnection.setArray():


Connection connection = JdbcConnection.getInstance().createConnection();

OracleConnection oconnection = (OracleConnection) connection.unwrap( oracle.jdbc.OracleConnection.class );


String [] name = new String[]{"20206643799002684001","20206643799002684001"};

ArrayDescriptor arrDec = ArrayDescriptor.createDescriptor("ARRAY_VARCHAR2",oconnection);

ARRAY arr = new ARRAY(arrDec,oconnection,name);

/*

 * Or

 * ARRAY arr = oconnection.createARRAY("ARRAY_VARCHAR2", name);

 */

OracleCallableStatement callableStatement

  = (OracleCallableStatement) oconnection.prepareCall("{call bss_acc.ACC_STATEMENT(?,?,?,?)}");

callableStatement.setDate(1,date);

callableStatement.setDate(2,dateL);

callableStatement.setARRAY(3,arr);

callableStatement.setString(4,this.branchId);

callableStatement.execute();


查看完整回答
反對 回復 2023-07-19
  • 2 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號