resultSet.getTimeStamp()不起作用

时间:2011-05-05 10:54:08

标签: java odbc

使用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 个答案:

答案 0 :(得分:2)

你的JDBC驱动程序真的非常老了(比如10岁)。

你应该尝试的第一件事是使用当前的驱动程序(ojdbc6.jar)。

编辑:这是一个discussion on the oracle forums - 它肯定是驱动程序版本11.1.0.6.0中修复的驱动程序错误

答案 1 :(得分:1)

如果你这样做会怎样?

     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){}

我感觉Oracle中的CURRENT_TIMESTAMP返回TIMESTAMP WITH TIME ZONE数据类型,该数据类型未在JDBC驱动程序中正确映射。您可能必须将其作为字符串获取并手动解析。

就某些机器而不是其他机器而言,这个可能是由于oracle安装上的时区和JVM的时区设置不同。

答案 2 :(得分:0)

来自JavaDoc的getTimeStamp(int columnIndex )(以及其他方法)的一个注释:@param columnIndex the first column is 1, the second is 2, ...,它不是基于0的,因此getTimeStamp(1)将返回第一列。那是你要的吗?或者你的timestamp列可能是结果集中的第二个?

修改:我没有看到您在代码中使用getTimestamp(1)