2013-07-27 37 views
0

我對java.sql.*有幾個問題;Java.SQL和PostgreSQL表

1)如何獲得表格中所有列的類型列表?現在我請求

SELECT data_type FROM information_schema.columns 
WHERE information_schema.columns.table_name = 'TableName'; 

如何使用Java做同樣的事情?我認爲與發言者的姓名相似。

2)然而,它不清楚如何來定義列屬性:NULL/NOT NULLPRIMARY KEY

3)一個單獨的問題約SERIAL:獲取類型時,該列返回INT和其處理是不可能。有沒有區分SERIAL列的方法?

謝謝您的理解。

回答

0

您可以使用DatabaseMetaData.getColumns()查詢表中的列。

根據你的願望,得到TableName數據:

DatabaseMetaData dbmd = connection.getMetaData() 
try (ResultSet columns = dbmd.getColumns(null, null, "TableName", "%")) { 
    while(columns.next()) { 
     // get the info from the resultset (eg the java.sql.Types value): 
     int dataType = columns.getInt("DATA_TYPE"); 
    } 
} 

的參數getColumnsLIKE -patterns,這就是爲什麼最後一個參數(columnPattern)得到值"%"。可以從列NULLABLEIS_NULLABLE中檢索可空性,關於序列的信息可能可以從列IS_AUTOINCREMENT中檢索到,參見文檔以獲得細節。要找到主鍵,您可以使用DatabaseMetaData.getPrimaryKeys()

欲瞭解更多信息,請看javadoc,它非常詳細。

+0

回覆NULLABLE/IS_NULLABLE和IS_AUTOINCREMENT for PostgreSQL對於其他的謝謝不是真的。 – 0xDEADBEEF

+0

查看[AbstractJdbc2DatabaseMetaData](https://github.com/pgjdbc/pgjdbc/blob/master/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java)的postgresql-jdbc源文件,在JDBC驅動程序中設置這些列(行2512和2519)。它看起來像'串行'也表示在列'TYPE_NAME'(2841行) –