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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

racle的STRUCT和VARRAY的读写方法

發(fā)布時間:2024/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 racle的STRUCT和VARRAY的读写方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Oracle的STRUCT和VARRAY的讀寫方法

巧巧電腦網絡?2010-02-25?qqread?佚名???收藏此文? 大 中小 分享到 QQ空間 人人網 開心網 豆瓣 新浪微博騰訊微博更多 本文給出了讀寫oracle的特殊數(shù)據(jù)類型STRUCT和VARRAY的操作方法。首先,創(chuàng)建類型 CREATE TYPE Struct_Test AS OBJECT(s VARCHAR(30), i NUMBER); CREATE TYPE number_varray AS VARRAY(10) OF NUMBER(12, 2); 然后。

  本文給出了讀寫Oracle的特殊數(shù)據(jù)類型STRUCT和VARRAY的操作方法。

  首先,創(chuàng)建類型

  CREATE TYPE Struct_Test AS OBJECT(s VARCHAR(30), i NUMBER);

  CREATE TYPE number_varray AS VARRAY(10) OF NUMBER(12, 2);

  然后,創(chuàng)建表

  CREATE TABLE test(i NUMBER, obj Struct_Test);

  REATE TABLE VARRAY_TABLE(col_number_array number_varray)

  然后,插入數(shù)據(jù)

  //插入STRUCT數(shù)據(jù)

  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數(shù)據(jù)

  // 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();

  最后,讀取數(shù)據(jù)

  //讀取STRUCT數(shù)據(jù)

  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數(shù)據(jù)

  // 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,否則字符串類型的數(shù)據(jù)是亂碼,插入失敗,讀取出來是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:
  • Creates VARRAYs of different lengths.
  • Contains a table to store data of above array type.
  • Stores the objects in an array.Inserts them into database table in two different ways (with SQL and ArrayDescriptor).</LI itxtHarvested="0" itxtNodeId="459">
  • import java.sql.*; import oracle.sql.*; import oracle.jdbc.oracore.Util; import oracle.jdbc.*; public class VArrayManipulation { public static void main (String args[]) throws Exception { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); // The sample retrieves an varray of type "STRING_VARRAY", // materializes the object as an object of type ARRAY. // A new ARRAY is then inserted into the database. String url = "<connection url>"; // Connect to the database Connection conn = DriverManager.getConnection (url, "<user>" , "<password>"); conn.setAutoCommit (false); // Create a Statement Statement stmt = conn.createStatement (); try { stmt.execute ("DROP TABLE sample_varray_table"); stmt.execute ("DROP TYPE string_varray"); } catch (SQLException e) { //Exceptions will be thrown if Table and types doesnt exist . Ignore this } stmt.execute ("CREATE TYPE string_varray AS VARRAY(10) OF VARCHAR2(100)"); stmt.execute ("CREATE TABLE sample_varray_table (acol string_varray)"); //Insert using SQL stmt.execute ("INSERT INTO sample_varray_table VALUES (string_varray('Test1', 'Test2'))"); ResultSet rs = stmt.executeQuery("SELECT acol FROM sample_varray_table"); printResultSet (rs); //Insert using ArrayDescriptor // create a new ARRAY object String arrayElements[] = { "Test3", "Test4" }; ArrayDescriptor desc = ArrayDescriptor.createDescriptor ("STRING_VARRAY", conn); ARRAY newArray = new ARRAY(desc, conn, arrayElements); PreparedStatement ps = conn.prepareStatement ("insert into sample_varray_table values (?)"); ((OraclePreparedStatement)ps).setARRAY (1, newArray); ps.execute (); rs = stmt.executeQuery("SELECT acol FROM sample_varray_table"); printResultSet (rs); // Close all the resources rs.close(); ps.close(); stmt.close(); conn.close(); } public static void printResultSet (ResultSet rs) throws SQLException { System.out.println("********Fetch Starts....********"); int line = 0; while (rs.next()) { line++; System.out.println("********Row "+line+" : "); ARRAY array = ((OracleResultSet)rs).getARRAY (1); System.out.println ("Array is of type "+array.getSQLTypeName()); System.out.println ("Array is of length "+array.length()); // get Array elements String[] values = (String[]) array.getArray(); for (int i=0; i<values.length; i++) { System.out.println("index "+i+" = "+values[i] ); } } System.out.println("********Fetch Ends....********"); } }

    http://www.devx.com/tips/Tip/22034

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ===============

    上一篇: 如何在Oracle中修改Collection類型的變量。 | 下一篇: Javascript獲取字符串字節(jié)數(shù)的方法如何在JAVA程序中使用Struct一次傳入多條數(shù)據(jù)給Oracle的存儲過程。 為了減少連接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 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的读写方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。