使用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.
任何身体帮助我......
答案 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)
。