racle的STRUCT和VARRAY的读写方法
Oracle的STRUCT和VARRAY的讀寫方法
巧巧電腦網絡?2010-02-25?qqread?佚名???收藏此文? 大 中小 分享到 QQ空間 人人網 開心網 豆瓣 新浪微博騰訊微博更多 本文給出了讀寫oracle的特殊數據類型STRUCT和VARRAY的操作方法。首先,創建類型 CREATE TYPE Struct_Test AS OBJECT(s VARCHAR(30), i NUMBER); CREATE TYPE number_varray AS VARRAY(10) OF NUMBER(12, 2); 然后。本文給出了讀寫Oracle的特殊數據類型STRUCT和VARRAY的操作方法。
首先,創建類型
CREATE TYPE Struct_Test AS OBJECT(s VARCHAR(30), i NUMBER);
CREATE TYPE number_varray AS VARRAY(10) OF NUMBER(12, 2);
然后,創建表
CREATE TABLE test(i NUMBER, obj Struct_Test);
REATE TABLE VARRAY_TABLE(col_number_array number_varray)
然后,插入數據
//插入STRUCT數據
Object[] values = new Object[]{”str”, new BigDecimal(123)};
oracle.sql.StructDescriptor structDesc = oracle.sql.StructDescriptor.createDescriptor(”Struct_Test”, cn);
oracle.sql.STRUCT oracleStruct = new oracle.sql.STRUCT(structDesc, cn, values);
// Create a prepared statement for insertion into test
PreparedStatement ps = connection.prepareStatement(”INSERT INTO test VALUES(?,?)”);
// Set the values to insert
ps.setInt(1, 123);
ps.setObject(2, oracleStruct);
// Insert the new row
ps.execute();
//插入VARRAY數據
// Create an oracle.sql.ARRAY object to hold the values
oracle.sql.ArrayDescriptor arrayDesc = oracle.sql.ArrayDescriptor.createDescriptor(”number_varray”, connection);
int arrayValues[] = {123, 234};
oracle.sql.ARRAY array = new oracle.sql.ARRAY(arrayDesc, cn, arrayValues);
// Create a prepared statement for insertion into varray_table
PreparedStatement ps = cn.prepareStatement(”INSERT INTO varray_table VALUES(?)”);
// Set the values to insert
((oracle.jdbc.driver.OraclePreparedStatement)ps).setARRAY(1, array);
// Insert the new row
ps.execute();
最后,讀取數據
//讀取STRUCT數據
ResultSet resultSet = stmt.executeQuery(”SELECT * FROM test”);
while (resultSet.next()) {
// Get the Struct_Test value from the second column obj
oracle.sql.STRUCT oracleStruct = (oracle.sql.STRUCT)resultSet.getObject(2);
// Get the object1 values from each row
Object[] values = oracleStruct.getAttributes();
// Get the first value of object1, which is a string
String str = (String)values[0];
BigDecimal i = (BigDecimal)values[1];
}
//讀取VARRAY數據
// Create a statement
Statement stmt = cn.createStatement();
// Select rows from varray_table
ResultSet resultSet = stmt.executeQuery(”SELECT * FROM varray_table”);
// Get the VARRAY values from each row
while (resultSet.next()) {
// Get the VARRAY value in the first column
oracle.sql.ARRAY array = ((oracle.jdbc.driver.OracleResultSet)resultSet).getARRAY(1);
// Get the VARRAY elements; values.length is the number of values in the VARRAY
java.math.BigDecimal[] values = (java.math.BigDecimal[])array.getArray();
}
注意:亂碼問題,依賴于nls_charset12.jar,否則字符串類型的數據是亂碼,插入失敗,讀取出來是null
請將nls_charset12.jar放于classpath下即可。
相關文章:Oracle初學者必知的100個問題
oracle安裝完成后的初始口令? UPDATE AAA SET BNS_SNM=(SELECT BNS_SNM FROM BBB WHERE AAA.DPT_NO=BBB.DPT_NO) W HERE BBB.DPT_NO IS NOT NULL; 23. P4電腦安裝方法 將SYMCJIT.DLL改為SYSMCJIT.OLD 24. 何查詢SERVER是不是OPS? SELECT * FROM V$OPTION。
?
===============
?
Use Oracle's VARRAY Through JDBC This code snippet demonstrates how to use Oracle's VARRAY through JDBC. The code:http://www.devx.com/tips/Tip/22034
?
?
?
?
?
?
?
===============
上一篇: 如何在Oracle中修改Collection類型的變量。 | 下一篇: Javascript獲取字符串字節數的方法如何在JAVA程序中使用Struct一次傳入多條數據給Oracle的存儲過程。 為了減少連接Oracle數據庫的數量,需要將多條數據作為變量一次傳入Oracle的存儲過程中。方法如下: 步驟一:定義對象類型。 CREATE TYPE department_type AS OBJECT ( DNO NUMBER (10), NAME VARCHAR2 (50), LOCATION VARCHAR2 (50) ); 步驟二:定義一個對象類型的數組對象。 CREATE TYPE dept_array AS TABLE OF department_type; 步驟三:定義存儲過程來插入數據。 CREATE OR REPLACE PACKAGE objecttype ASPROCEDURE 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方法來調用存儲過程。 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());}} } http://zhidao.baidu.com/question/49553096.html?
總結
以上是生活随笔為你收集整理的racle的STRUCT和VARRAY的读写方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDBC query VARRAY on
- 下一篇: Spring batch 2.0例子(l