2013-07-27 18 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行) –