resultSet.getTimeStamp () не работает - PullRequest
0 голосов
/ 05 мая 2011

Я использую jdk-1.6, os-redhat 5, driver-class12.jar, (jar вместе с jdk lib) db-Oracle 10g

для resultset.getTimestamp ("CURRENT_TIMESTAMP") выдает недопустимый столбецисключение типа

 public Timestamp getCurrentTimeStamp(Connection connection) throws SQLException {
        Timestamp timeStamp = null;
        try {
            PreparedStatement ps = connection.prepareStatement("SELECT CURRENT_TIMESTAMP FROM DUAL");
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                timeStamp = rs.getTimestamp("CURRENT_TIMESTAMP");
            }

        } catch(Exception e){}
        return timeStamp;
    }

В некоторых системах работает нормально, только на сервере выдает следующее исключение

java.sql.SQLException: Invalid column type
        at oracle.jdbc.dbaccess.DBError.
throwSqlException(DBError.java:189)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:294)
        at oracle.jdbc.driver.OracleStatement.getTimestampValue(OracleStatement.java:4627)
        at oracle.jdbc.driver.OracleResultSetImpl.

Любое тело поможет мне ....

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Ваш драйвер JDBC действительно, ДЕЙСТВИТЕЛЬНО стар (как 10 лет).

Первое, что вы должны попробовать - использовать текущий драйвер (ojdbc6.jar).

Редактировать: Вот обсуждение на форумах оракула - это определенно ошибка драйвера, исправленная в версии 11.1.0.6.0 драйвера

1 голос
/ 05 мая 2011

Что произойдет, если вы сделаете

     String timeStamp = null;
     try {
        PreparedStatement ps = connection.prepareStatement("SELECT CURRENT_TIMESTAMP FROM DUAL");
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            timeStamp = rs.getString("CURRENT_TIMESTAMP");
        }

    } catch(Exception e){}

У меня такое ощущение, что CURRENT_TIMESTAMP в Oracle возвращает тип данных TIMESTAMP WITH TIME ZONE, который не отображается правильно в драйвере JDBC.Возможно, вам придется получить его в виде строки и проанализировать его вручную.

Поскольку он работает на некоторых компьютерах, а не на других, это может быть связано с часовыми поясами при установке Oracle ичасовые пояса JVM устанавливаются по-другому.

0 голосов
/ 05 мая 2011

Одна заметка из JavaDoc для getTimeStamp(int columnIndex ) (и других методов): @param columnIndex the first column is 1, the second is 2, ..., она не основана на 0, поэтому getTimeStamp(1) вернет первый столбец. Это то, что вы хотите? Или ваш столбец меток времени будет вторым в наборе результатов?

Редактировать: я не вижу, чтобы вы использовали getTimestamp(1) в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...