论坛首页 Java版 Hibernate

oracle中时间字段类型的出现问题!

浏览 11413 次
该帖已经被评为精华帖
作者 正文
时间:2003-12-23
我是这样用的:
<property name="pubTime" type="timestamp" column="PubTime"/>
用默认的时间:
private java.util.Date pubTime = new java.util.Date( );
插入到数据库中取出后结果是:2003年12月22日 00:00:00

改成:
<property name="pubTime" type="date" column="PubTime"/>
用的还是默认时间:
private java.sql.Date pubTime = new java.sql.Date( new java.util.Date().getTime() );
插入到数据库中取出后结果还是:2003年12月22日 00:00:00

2003年12月23日 00:39:53
我想得到的是连时分秒都有的,请问该怎么用?这种现象为什么会出现?我的Oracle是8.1.7
   
时间:2003-12-23
[code:1]
public class Oracle9Dialect extends Dialect {

public Oracle9Dialect() {
super();
registerColumnType( Types.BIT, "NUMBER(1,0)" );
registerColumnType( Types.BIGINT, "NUMBER(19,0)" );
registerColumnType( Types.SMALLINT, "NUMBER(5,0)" );
registerColumnType( Types.TINYINT, "NUMBER(3,0)" );
registerColumnType( Types.INTEGER, "NUMBER(10,0)" );
registerColumnType( Types.CHAR, "CHAR(1)" );
registerColumnType( Types.VARCHAR, "VARCHAR2($l)" );
registerColumnType( Types.FLOAT, "FLOAT" );
registerColumnType( Types.DOUBLE, "DOUBLE PRECISION" );
registerColumnType( Types.DATE, "DATE" );
registerColumnType( Types.TIME, "DATE" );
registerColumnType( Types.TIMESTAMP, "DATE" );
//registerColumnType( Types.VARBINARY, "RAW" );
registerColumnType( Types.VARBINARY, "LONG RAW" );
registerColumnType( Types.VARBINARY, 255, "RAW($l)" );
registerColumnType( Types.NUMERIC, "NUMBER(19, $l)" );
registerColumnType( Types.BLOB, "BLOB" );
registerColumnType( Types.CLOB, "CLOB" );

[/code:1]

[code:1]
public class OracleDialect extends Oracle9Dialect
[/code:1]

也就是说这些类型Hibernate都用Oracle的Date表示了。
   
0 请登录后投票
时间:2003-12-23
你用date它会把后面的时间弄掉。
<property
name="creationTime"
type="java.sql.Timestamp"
update="true"
insert="true"
column="creationTime"
/>
   
0 请登录后投票
时间:2003-12-23
在sql*plus下修改
update leave set pubtime=to_date('2003-12-23 10:25:23','YYYY-MM-DD HH:MI:SS');
得出来的还是2003年12月23日 00:00:00
用的是df.format( leave.getPubTime() );

用df.format( new Date() );
得出的是正确的:2003年12月23日 10:56:32

改用jdbc连接数据库,取得的结果照样还是2003年12月23日 00:00:00(包括从sql*plus中插入进去的数据也一样是)
可能是数据库的原因,还在找.
   
0 请登录后投票
时间:2003-12-23
to smallduzi
是指oracle中的date字段会把时间的后半部分截掉吗?
   
0 请登录后投票
时间:2003-12-23
rain999 写道
to smallduzi
是指oracle中的date字段会把时间的后半部分截掉吗?

不会!
   
0 请登录后投票
时间:2003-12-23
明白了,是java中的date的原因,是不是得用Calendar?
   
0 请登录后投票
时间:2003-12-23
private java.util.Date pubTime = new java.util.Date( );
没有时间的。
你刚开始做的是对的。
setCreationTime(new Timestamp(System.currentTimeMillis()));
   
0 请登录后投票
时间:2003-12-23
谢谢:)我去试一下!
setCreationTime(new Timestamp(System.currentTimeMillis()));
是指用
Timestamp time = new Timestamp(System.currentTimeMillis()));
来代替
java.util.Date pubTime = new java.util.Date( );
吗?
   
0 请登录后投票
时间:2003-12-23
非常感谢smallduzi,时间终于出来了,高兴ing~~~~~~~~~~~~~~~
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐