簡體   English   中英

JDBC:從元數據獲取數組的類型

[英]JDBC : get the type of an array from the metadata

是否可以從JDBC元數據結構中獲取數組列的類型?

re = openedConnection.getMetaData().getColumns(...)
while (rs.next())
{
  final String columnName = rs.getString("COLUMN_NAME");
  final int columnType = rs.getInt("DATA_TYPE");
  ...

類型返回ARRAY,但返回什么數組(整數,文本,數字...)?

理想情況下,數據庫獨立(Oracle和Postgres支持對MySQL或SQL Server不確定)

使用java.sql.ResultSetMetaData.getColumnTypeName()

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

輸出

SCHEMA_NAME.RANDOM_ARRAY: [a, b, c]

然后,如果您想返回到Oracle並查找集合元素的類型,可以使用:

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

哪個輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM