Для PostgreSQL ResultSetMetaData.getColumnType () функция возвращает одинаковое значение (Types.TIMESTAMP) для столбцов TIMESTAMPTZ и TIMESTAMP. - PullRequest
3 голосов
/ 28 февраля 2020

У меня есть таблица базы данных, которая имеет два столбца. Один из них - TIMESTAMPTZ, другой - TIMESTAMP. Когда я читаю тип столбца с помощью функции getColumnType () из JDB C, он возвращает 93 (Types.TIMESTAMP) для обоих столбцов. Но когда вы выбираете функцию getColumnTypeName (), она возвращает разные значения.

Вот пример кода:

try {
    Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/tztestdb", "u", "p");

    Statement statements = connection.createStatement();
    ResultSet resultSet = statements.executeQuery("SELECT * FROM TZTEST");

    ResultSetMetaData metaData = resultSet.getMetaData();

    for (int i = 1; i <= metaData.getColumnCount(); i++) {
        String columnName = metaData.getColumnName(i);
        String type = metaData.getColumnTypeName(i);
        int typeNo = metaData.getColumnType(i);

        System.out.println(columnName + " > " + type + " > " + typeNo);
    }

    connection.close();
} catch (Exception e) {
    e.printStackTrace();
}

, а вот вывод:

datetimetzcol > timestamptz > 93
datetimecol > timestamp > 93

Есть ли простой способ распознать / обнаружить разницу без сравнения текста?

...