论坛首页 Java企业应用论坛

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

浏览 23906 次
该帖已经被评为精华帖
作者 正文
   发表时间: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  
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" );;



public class OracleDialect extends Oracle9Dialect


也就是说这些类型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企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics