Есть ли способ различить в Oracle / JDBC между DATE и TIMESTAMP? - PullRequest
7 голосов
/ 30 марта 2019

У меня есть Java-приложение, в котором пользователь строит свой оператор SQL select на экране. Как только они вводят select, я анализирую с помощью JDBC типы столбцов.

Для Oracle эквивалент JDBC типа DATE равен java.sql.Types.Timestamp, поскольку DATE включает время.

Проблема в том, что мне нужно отформатировать набор результатов в зависимости от типа столбца. Если это DATE, мне нужно отформатировать значение YYYY-MM-DD. Если это TIMESTAMP, мне нужно отформатировать значение YYYY-MM-DD HH:MM:SS.

Что мне нужно, так это различать в JDBC результаты DATE и TIMESTAMP. Есть ли способ добиться этого?

Пример кода:

        String sql = "select date_col, timestamp_col from some_table";
        ResultSet rs = stmt.executeQuery(sql);
        ResultSetMetaData meta = rs.getMetaData();
        int count = meta.getColumnCount();

        for (int i=1;i <= count;i++) {
            int type = meta.getColumnType(i);
            System.out.println(type);
        }

Это печатает дважды 93, что составляет java.sql.Types.Timestamp.

CREATE TABLE "DB1"."SOME_TABLE" 
   ("SOMENUM" NUMBER(9,0), 
    "DATE_COL" DATE, 
    "TIMESTAMP_COL" TIMESTAMP (6), 
    "ACCOUNT" NUMBER(9,0), 
    "BALANCE" FLOAT(126)) 

Примечание: я запускаю это на Wildfly 14

Я пытался привести sql Connection к OracleConnection (чтобы получить типы oracle.sql) и броски Wildfly:

org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8 не может быть приведен к oracle.jdbc.OracleConnection

1 Ответ

4 голосов
/ 02 апреля 2019

Вы можете использовать ResultSetMetdata#getColumnTypeName, чтобы получить фактическое имя типа БД

Извлекает имя типа для указанного столбца для базы данных.

Возвращаемое имя типа, используемого базой данных. Если тип столбца является пользовательским типом, возвращается полное имя типа.

...