Oracle数据库,JDBC访问,字段类型是DATE,PreparedStatement里用setTimestamp还是setDate?

yanransoft 2009-05-04 07:50:53
如题。
...全文
1568 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanransoft 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 java2000_net 的回复:]
如果有时分秒,就用setTimestamp 同时你的属性也最好用 Timestamp 类。

如果只有年月日,用setDate

不过许多人更愿意记录一个long, 呵呵,你能猜出来这个long是啥吗?
[/Quote]

呵呵,Date.getTime(),since 1970.1.1 ...
yanransoft 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 imasmallbird 的回复:]
引用 13 楼 yanransoft 的回复:
我考虑下,java.sql.Date无法满足包含时间信息的要求,java.sql.Timestamp在Oracle被识别为timestamp类型,跟DATE类型不符,不能使用索引。所以综合来看,使用to_date函数传入字符串类型的时间串最好。 大家还有其它高见否?

其实当初要是把表里的字段设置成Varchar2()的就好了~~
还有请教一下那个不能使用索引是如何看出来的??
[/Quote]
直观看执行速度。
yanransoft 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 x114944880 的回复:]
java.sql.Date 转换成Util的再拿时间信息
[/Quote]
java.util.Date不能传给PreparedStatement的。
x114944880 2009-05-06
  • 打赏
  • 举报
回复
java.sql.Date 转换成Util的再拿时间信息
yanransoft 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 thc1987 的回复:]
如果你的日期类型是java.sql.Date的话,就setDate()
[/Quote]
可是java.sql.Date的类型不包含时间信息的。
老紫竹 2009-05-06
  • 打赏
  • 举报
回复
如果有时分秒,就用setTimestamp 同时你的属性也最好用 Timestamp 类。

如果只有年月日,用setDate

不过许多人更愿意记录一个long, 呵呵,你能猜出来这个long是啥吗?
Landor2004 2009-05-06
  • 打赏
  • 举报
回复
Oracle数据库,JDBC访问,字段类型是DATE,PreparedStatement里用setTimestamp还是setDate?

oracle java
date java.sql.date
timestamp java.sql.timestamp

如果oracle是date,而java中用sql.date的话,会丢失时分秒,所以可以另想办法

比如:java中是日期字符串,后台用to_date(datestr,'yyyy-mm-dd hh24:mi:ss')来转换

当然oracle中的date类型在获取的时候也会自动去掉时分秒,所以可以用to_char函数来处理

带时分秒的,最好的方法当然是前后都用timestamp
imasmallbird 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yanransoft 的回复:]
我考虑下,java.sql.Date无法满足包含时间信息的要求,java.sql.Timestamp在Oracle被识别为timestamp类型,跟DATE类型不符,不能使用索引。所以综合来看,使用to_date函数传入字符串类型的时间串最好。 大家还有其它高见否?
[/Quote]
其实当初要是把表里的字段设置成Varchar2()的就好了~~
还有请教一下那个不能使用索引是如何看出来的??
yanransoft 2009-05-06
  • 打赏
  • 举报
回复
我考虑下,java.sql.Date无法满足包含时间信息的要求,java.sql.Timestamp在Oracle被识别为timestamp类型,跟DATE类型不符,不能使用索引。所以综合来看,使用to_date函数传入字符串类型的时间串最好。 大家还有其它高见否?
zxcv_168 2009-05-05
  • 打赏
  • 举报
回复
setTimeStamp()。
emon123 2009-05-05
  • 打赏
  • 举报
回复
如果想要得到时间和日期信息,用setTimeStamp()。因为Timestamp封装有关签署时间戳的信息,它包括了时间戳的日期和时间
imasmallbird 2009-05-05
  • 打赏
  • 举报
回复
java.sql.Timestamp继承java.util.Date类并加以扩充,如果在sql里使用
setDate()设置的时间只包括年月日,要完整时间需要调用setTimeStamp()
猿敲月下码 2009-05-05
  • 打赏
  • 举报
回复
如果你的日期类型是java.sql.Date的话,就setDate()
yanransoft 2009-05-05
  • 打赏
  • 举报
回复
如果是ps.setTimestamp的话是不是在Oracle那边,是被识别为一个Timestamp对象呢?也就是to_timestamp的返回对象类型一致?
xdop 2009-05-05
  • 打赏
  • 举报
回复
Oracle 9i开始有timestamp
该用Date还是Timestamp看日期精度要求情况而定

to_timestamp是SQL的类型强转函数,能不用则尽量别用。


yanransoft 2009-05-05
  • 打赏
  • 举报
回复
谢谢大家,但是又有一个问题,就是setTimestamp的话, 那这个DATE类型的字段上的索引又用不上了。。
JDBC的setTimestamp是不是和to_timestamp的效果一样的?
大家可以看下,DATE字段如果用to_timestamp不会使用索引, 而用to_date是可以利用索引的。
yanransoft 2009-05-04
  • 打赏
  • 举报
回复
可是setDate有这样的问题,就是它本身是不包含时间信息的,即时间永远是00:00:00.可Oracle的DATE字段时可以存储时间的啊,可以to_date('...','yyyymmdd hh24:mi:ss')的。
daihua_1113 2009-05-04
  • 打赏
  • 举报
回复
setDate

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧