JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法

本文详细介绍了如何将Java的util.Date转化为SQL的Date类型,如何使用PreparedStatement进行日期插入数据库,以及如何将yyyy-mm-dd格式的字符串转换为SQL Date。同时讨论了Java.sql.Date类型在数据库中可能存在的数据截取问题,提供了解决方案,如使用Timestamp类型以保存日期的精确信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

1、如何将java.util.date转化为java.sql.date?

转化:

java.sql.date sd;

java.util.date ud;

//initialize the ud such as ud = new java.util.date();

sd = new java.sql.date(ud.gettime());

2、如果要插入到数据库并且相应的字段为date类型

那么可以用preparedstatement.setdate(int ,java.sql.date)方法

其中的java.sql.date可以用上面的方法得到

也可以用数据库提供to_date函数

比如 现有 ud

to_date(new simpledateformat().format(ud,"yyyy-mm-dd hh:mm:ss"),

"yyyy-mm-dd hh24:mi:ss")

注意java中表示格式和数据库提供的格式的不同

一个实际的例子

sql="update tablename set timer=to_date('"+t+"','yyyymmddhh24miss') where ....."

这里的t为变量为类似:20051211131223

3、如何将"yyyy-mm-dd"格式的字符串转换为java.sql.date

方法1

simpledateformat bartdateformat =

new simpledateformat("yyyy-mm-dd");

string datestringtoparse = "2007-7-12";

try {

java.util.date date = bartdateformat.parse(datestringtoparse);

java.sql.date sqldate = new java.sql.date(date.gettime());

system.out.println(sqldate.gettime());

}

catch (exception ex) {

system.out.println(ex.getmessage());

}

------------------------------------------------------------

方法2

stringstrdate="2002-08-09";

stringtokenizerst=newstringtokenizer(strdate,"-");

java.sql.datedate=newjava.sql.date(integer.parseint(st.nexttoken()),

integer.parseint(st.nexttoken()),

integer.parseint(st.nexttoken()));

java.util.date和java.sql.date的异同

java.sql.date,java.sql.time和java.sql.timestamp三个都是java.util.date的子类(包装类)。

但是为什么java.sql.date类型的值插入到数据库中date字段中会发生数据截取呢?

java.sql.date是为了配合sql date而设置的数据类型。“规范化”的java.sql.date只包含年月日信息,时分秒毫秒都会清零。格式类似:yyyy-mm-dd。当我们调用resultset的getdate()方法来获得返回值时,java程序会参照"规范"的java.sql.date来格式化数据库中的数值。因此,如果数据库中存在的非规范化部分的信息将会被劫取。

在sun提供的resultset.java中这样对getdate进行注释的:

retrieves the of the designated column in the current row of this resultset object as a “java.sql.date” object in the java programming language.

同理。如果我们把一个java.sql.date值通过preparestatement的setdate方法存入数据库时,java程序会对传入的java.sql.date规范化,非规范化的部分将会被劫取。然而,我们java.sql.date一般由java.util.date转换过来,如:java.sql.date sqldate=new java.sql.date(new java.util.date().gettime()).

显然,这样转换过来的java.sql.date往往不是一个规范的java.sql.date.要保存java.util.date的精确值,

我们需要利用java.sql.timestamp.

calendar

calendarcalendar=calendar.getinstance();

//获得当前时间,声明时间变量

intyear=calendar.get(calendar.year);

//得到年

intmonth=calendar.get(calendar.month);

//得到月,但是,月份要加上1

month=month+1;

intdate=calendar.get(calendar.date);

//获得日期

stringtoday=""+year+"-"+month+"-"+date+"";


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值