Oracle中明明是Date,取出来怎么成了Timestamp了?

时间:2022-01-31 16:04:07
Oracle9,一个字段UPD_DATE是DATE类型,用resultSetMetaData.getColumnType(1)取得91(也就是说是java.sql.Types.DATE),可是用rs.getObject(1)出来的Object用getClass().getName()得到的是java.sql.Timestamp。打出来也是2003-12-09 00:00:00.0这样的格式,这是怎么回事

14 个解决方案

#1


是不是自动下溯造型了

#2


不用getObject不就行了么

#3


TO:找抽

8是吧?java.sql.Types中有TIMESTAMP呀

而且,java.sql.Timestamp和java.sql.Date是并列的,都继承自java.util.Date

TO: peterguan(糖糖)

嗯,我是想如果能找到原因就更好了

#4


将帖子提前

#5


看来是没人能说出所以然了,就当散分了吧

#6


总有知道的,帮楼主up

#7


不光在oracle里是这样,在其他数据库里好像都是这样。

#8


这个问题果然有点意思。
估计是跟ORACLE的JDBC实现有关
不知道楼主用的是否ORACLE的官方实现
我反编译ORACLE的看了下
是返回oracle.sql.DATE类型
new oracle.sql.DATE(byte[]);
靠,不知道怎么这个byte[]就被它变成Timestamp了
没再看下去
太浪费时间了

#9


在sqlserver里有和DATE相对应的类型么?

#10


虽然问题没解决,但是时间也很长了,下午下班前揭帖

#11


关注

#12


应该和ORALCE JDBC的版本有关
Timestamp 也是标准来着,原先我们公司做电信的都用这种类型和数据打交道。

#13


希望这个对你有帮助。
    try {
        // Get database meta data
        DatabaseMetaData dbmd = connection.getMetaData();
    
        // Get type info
        ResultSet resultSet = dbmd.getTypeInfo();
    
        // Retrieve type info from the result set
        while (resultSet.next()) {
            // Get the database-specific type name
            String typeName = resultSet.getString("TYPE_NAME");
    
            // Get the java.sql.Types type to which this database-specific type is mapped
            short dataType = resultSet.getShort("DATA_TYPE");
    
            // Get the name of the java.sql.Types value.
            // This method is implemented in e291 Getting the Name of a JDBC Type
            String jdbcTypeName = getJdbcTypeName(dataType);
        }
    } catch (SQLException e) {
    }

Here's an example of output for the MySQL database: 
    MySQL Type Name, JDBC Type Name
    
    TINYINT, TINYINT
    BIGINT, BIGINT
    MEDIUMBLOB, LONGVARBINARY
    MEDIUMTEXT, LONGVARBINARY
    LONGBLOB, LONGVARBINARY
    LONGTEXT, LONGVARBINARY
    BLOB, LONGVARBINARY
    TEXT, LONGVARBINARY
    TINYBLOB, VARBINARY
    TINYTEXT, VARBINARY
    CHAR, CHAR
    NUMERIC, NUMERIC
    DECIMAL, DECIMAL
    INT, INTEGER
    MEDIUMINT, INTEGER
    SMALLINT, SMALLINT
    FLOAT, FLOAT
    DOUBLE, DOUBLE
    DOUBLE PRECISION, DOUBLE
    REAL, DOUBLE
    VARCHAR, VARCHAR
    ENUM, VARCHAR
    SET, VARCHAR
    DATE, DATE
    TIME, TIME
    DATETIME, TIMESTAMP
    TIMESTAMP, TIMESTAMP

#14


object obj=(java.util.Date) *.getObject;

#1


是不是自动下溯造型了

#2


不用getObject不就行了么

#3


TO:找抽

8是吧?java.sql.Types中有TIMESTAMP呀

而且,java.sql.Timestamp和java.sql.Date是并列的,都继承自java.util.Date

TO: peterguan(糖糖)

嗯,我是想如果能找到原因就更好了

#4


将帖子提前

#5


看来是没人能说出所以然了,就当散分了吧

#6


总有知道的,帮楼主up

#7


不光在oracle里是这样,在其他数据库里好像都是这样。

#8


这个问题果然有点意思。
估计是跟ORACLE的JDBC实现有关
不知道楼主用的是否ORACLE的官方实现
我反编译ORACLE的看了下
是返回oracle.sql.DATE类型
new oracle.sql.DATE(byte[]);
靠,不知道怎么这个byte[]就被它变成Timestamp了
没再看下去
太浪费时间了

#9


在sqlserver里有和DATE相对应的类型么?

#10


虽然问题没解决,但是时间也很长了,下午下班前揭帖

#11


关注

#12


应该和ORALCE JDBC的版本有关
Timestamp 也是标准来着,原先我们公司做电信的都用这种类型和数据打交道。

#13


希望这个对你有帮助。
    try {
        // Get database meta data
        DatabaseMetaData dbmd = connection.getMetaData();
    
        // Get type info
        ResultSet resultSet = dbmd.getTypeInfo();
    
        // Retrieve type info from the result set
        while (resultSet.next()) {
            // Get the database-specific type name
            String typeName = resultSet.getString("TYPE_NAME");
    
            // Get the java.sql.Types type to which this database-specific type is mapped
            short dataType = resultSet.getShort("DATA_TYPE");
    
            // Get the name of the java.sql.Types value.
            // This method is implemented in e291 Getting the Name of a JDBC Type
            String jdbcTypeName = getJdbcTypeName(dataType);
        }
    } catch (SQLException e) {
    }

Here's an example of output for the MySQL database: 
    MySQL Type Name, JDBC Type Name
    
    TINYINT, TINYINT
    BIGINT, BIGINT
    MEDIUMBLOB, LONGVARBINARY
    MEDIUMTEXT, LONGVARBINARY
    LONGBLOB, LONGVARBINARY
    LONGTEXT, LONGVARBINARY
    BLOB, LONGVARBINARY
    TEXT, LONGVARBINARY
    TINYBLOB, VARBINARY
    TINYTEXT, VARBINARY
    CHAR, CHAR
    NUMERIC, NUMERIC
    DECIMAL, DECIMAL
    INT, INTEGER
    MEDIUMINT, INTEGER
    SMALLINT, SMALLINT
    FLOAT, FLOAT
    DOUBLE, DOUBLE
    DOUBLE PRECISION, DOUBLE
    REAL, DOUBLE
    VARCHAR, VARCHAR
    ENUM, VARCHAR
    SET, VARCHAR
    DATE, DATE
    TIME, TIME
    DATETIME, TIMESTAMP
    TIMESTAMP, TIMESTAMP

#14


object obj=(java.util.Date) *.getObject;