首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Java 從 Oracle 讀取 VARRAY 型別資料範例

     編輯:Oracle 資料庫相關知識

Oracle 支援集合型別 VARRAY、NESTED TABLE。本文示範透過 JDBC 讀取 VARRAY 欄位,並處理字元集轉換 (ZHS16GBK)。

資料庫準備

CREATE TYPE num_varray AS VARRAY(10) OF VARCHAR2(12);
CREATE TABLE varray_table (col1 num_varray);
INSERT INTO varray_table VALUES (num_varray('你好', 'abc'));

Java 完整程式碼

import java.sql.*;
import java.math.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;

class Array1 {
  public static void main(String args[]) throws Exception {
    int oracleId = CharacterSet.ZHS16GBK_CHARSET;
    CharacterSet dbCharset = CharacterSet.make(oracleId);

    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection(
      "jdbc:oracle:thin:@10.9.200.58:1521:db01", "mytest", "mytest");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM varray_table");

    while (rs.next()) {
      ARRAY myArray = ((OracleResultSet) rs).getARRAY(1);
      System.out.println("Array type: " + myArray.getSQLTypeName());
      System.out.println("Element typecode: " + myArray.getBaseType());
      System.out.println("Array length: " + myArray.length());

      String[] values = (String[]) myArray.getArray();
      for (int i = 0; i < values.length; i++) {
        oracle.sql.CHAR outVal = new oracle.sql.CHAR(values[i], dbCharset);
        System.out.println(">> index " + i + " = " + outVal);
      }
    }
    rs.close(); stmt.close(); conn.close();
  }
}

關鍵點解析

  • OracleResultSet.getARRAY(int) 取得 oracle.sql.ARRAY 物件。
  • getArray() 回傳 Java 陣列 (String[]、BigDecimal[] 等),元素型別對應 SQL 基礎型別。
  • 中文環境必須用 oracle.sql.CHAR 配合 CharacterSet 正確解碼,否則會出現亂碼。
  • getBaseType() 回傳 OracleTypes 常數 (如 VARCHAR = 12)。

此模式同樣適用於 NESTED TABLE,只需將資料表欄位型別改為巢狀表型別即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved