Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

JDBC:lấy kiểu mảng từ siêu dữ liệu

Sử dụng java.sql.ResultSetMetaData.getColumnTypeName() :

Thiết lập Oracle :

CREATE OR REPLACE TYPE random_array IS TABLE OF VARCHAR2(42);
/

Java :

Class.forName("oracle.jdbc.OracleDriver");

Connection con = DriverManager.getConnection(
    "jdbc:oracle:thin:@localhost:1521:orcl",
    "username",
    "password"
);

PreparedStatement st = con.prepareStatement(
    "SELECT random_array( 'a', 'b', 'c' ) AS array FROM DUAL"
);

ResultSet rs = st.executeQuery();
while( rs.next() )
{
  String type = rs.getMetaData().getColumnTypeName(1);
  String[] data = (String[]) rs.getArray(1).getArray();
  System.out.println( type + ": " + Arrays.toString( data ) );
}

st.close();
con.close();

Đầu ra :

SCHEMA_NAME.RANDOM_ARRAY: [a, b, c]

Nếu sau đó bạn muốn quay lại Oracle và tìm loại phần tử tập hợp mà bạn có thể sử dụng:

SELECT ELEM_TYPE_NAME,
       LENGTH,
       PRECISION,
       SCALE
FROM   ALL_COLL_TYPES
WHERE  TYPE_NAME = 'RANDOM_ARRAY'
AND    OWNER     = 'SCHEMA_NAME';

Đầu ra nào:

ELEM_TYPE_NAME LENGTH PRECISION SCALE
-------------- ------ --------- -----
VARCHAR2           42



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi mảng byte từ Oracle RAW sang System.Guid?

  2. Truy vấn hoạt động trên Oracle 11g nhưng không thành công trên Oracle 8i

  3. Hibernate không thể tìm nạp SequenceInformation từ cơ sở dữ liệu

  4. Truy vấn để có được bản ghi gần đây nhất và (trong trường hợp quan hệ) với giá trị hoặc tỷ lệ phần trăm cao hơn theo thẻ và dịch vụ

  5. Lỗi SSMA cho Oracle Kết nối với Oracle