【问题标题】:Java.SQL and PostgreSQL tableJava.SQL 和 PostgreSQL 表
【发布时间】:2013-07-27 17:25:03
【问题描述】:

我有几个问题要问java.sql.*

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 列?

感谢您的理解。

【问题讨论】:

    标签: java sql database postgresql jdbc


    【解决方案1】:

    您可以使用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");
        }
    }
    

    getColumns 的参数是LIKE-patterns,这就是为什么最后一个参数(columnPattern)的值是"%"。可空性可以从NULLABLEIS_NULLABLE 列中检索,有关串行的信息可能可以从IS_AUTOINCREMENT 列中检索,有关详细信息,请参阅文档。要查找主键,您可以使用DatabaseMetaData.getPrimaryKeys()

    更多信息,看javadoc,很详细。

    【讨论】:

    • 关于 NULLABLE / IS_NULLABLE 和 IS_AUTOINCREMENT 对于 PostgreSQL 的其余部分不正确,谢谢。
    • 查看 AbstractJdbc2DatabaseMetaData 的 postgresql-jdbc 源代码,这些列是在 JDBC 驱动程序中设置的(第 2512 和 2519 行)。看起来serial 也由列TYPE_NAME 指示(第2841 行)
    猜你喜欢
    • 2013-08-15
    • 2018-06-22
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多