PreparedStatement设置指定时间

        这里使用的是Oracle数据库, 现将日期字符串向表中设值时,  一般使用preparedStatement.setDate().

(这样只能存入日期 ),具体做法如下:
      
/**将日期字符串转为java.util.Date类型*/
SimpleDateFormat sdf 
=   new  SimpleDateFormat( " yyyyMMdd " );
java.util.Date utilDate 
=  sdf.parse( " 20071001 " );
/**将utilDate转成sqlDate类型*/
java.sql.Date sqlDate 
=  utilDate.getTime();
/**通过预处理写入数据库*/
preparedStatement.setDate(1,sqlDate);
注意:SimpleDateFormat的日期格式“yyyyMMdd”,不能写成"yyyymmdd",否则将得到的日期只会为01月。



另类取得年月日的方法:
import  java.text.SimpleDateFormat;
import  java.util. * ;
java.util.Date date 
=   new  java.util.Date();
// 如果希望得到YYYYMMDD的格式SimpleDateFormat 
SimpleDateFormat syf = new  SimpleDateFormat( " yyyyMMDD " );
String dateFormat
= syf.format(date);
// 如果希望分开得到年,月,日SimpleDateFormat 
SimpleDateFormat sy = new  SimpleDateFormat( " yyyy " );
SimpleDateFormat sm
= new  SimpleDateFormat( " MM " );
SimpleDateFormat sd
= new  SimpleDateFormat( " dd " );
String syear
= sy.format(date);
String smon
= sm.format(date);
String sday
= sd.format(date);
<think>嗯,用户想了解如何正确设置JDBC连接MySQL时的serverTimezone参数。这个问题我之前在开发中也遇到过,记得那时候插入的时间总是不对,差了8小时。让我先回忆一下相关知识。 首先,根据引用[1],JDBC连接字符串需要显式设置serverTimezone,比如用GMT%2B8或者UTC。但为什么会有时区问题呢?引用[4]提到,如果设置serverTimezone=UTC,Java插入的时间会和数据库显示的时间相差8小时,因为北京是东八区,UTC标准时间比北京晚8小时。所以可能需要设置成GMT+8或者Asia/Shanghai这样的时区名称。 接下来,引用[2]中的错误信息提示时区无法识别,必须明确配置serverTimezone。这说明当MySQL服务器的时区设置不明确时,JDBC驱动需要这个参数来正确处理时间转换。引用[5]也提到在IDE的高级设置中手动设置serverTimezone属性,可能是在类似IntelliJ的数据库配置界面里。 然后,引用[3]指出,JDBC会将Java的Date根据指定的时区转换为字符串写入数据库,这与数据库本身的时区配置无关。这意味着无论数据库服务器在哪个时区,只要JDBC连接字符串正确设置了serverTimezone,就能保证时间正确转换。 那正确的配置方法应该是什么呢?根据引用[1]的例子,可以在URL后面加上serverTimezone=UTC,但这样可能会有时差问题。所以更好的做法是设置为实际的时区,比如GMT+8或者Asia/Shanghai。但需要注意的是,有些版本的JDBC驱动可能不支持GMT+8的写法,可能需要使用URL编码后的格式,比如GMT%2B8。 另外,用户可能遇到的问题包括连接错误(如时区无法识别)或者时间差8小时。需要根据具体情况调整参数。例如,在中国,使用Asia/Shanghai可能更可靠,因为这是标准的时区名称,兼容性更好。 总结一下,正确的步骤应该是:确定服务器所在时区,然后在JDBC连接字符串中添加serverTimezone参数,使用合适的时区,如Asia/Shanghai或GMT+8,并注意URL编码的问题。同时,如果遇到时区错误提示,需要检查驱动版本和时区名称的正确性。</think>### 如何正确配置JDBC连接字符串的`serverTimezone`参数? #### 1. **问题背景** - **时区不匹配**:JDBC连接MySQL时,若未明确设置`serverTimezone`,可能导致时间转换错误或时区冲突(例如插入时间数据库存储时间相差8小时)[^4]。 - **错误提示**:可能出现类似`The server time zone value is unrecognized`的错误,要求明确指定时区[^2][^5]。 #### 2. **配置方法** 在JDBC连接URL中添加`serverTimezone`参数,格式为: ``` jdbc:mysql://<host>:<port>/<database>?serverTimezone=<时区>&其他参数 ``` **关键点**: - **时区选择**: - **推荐使用标准时区名称**:如`Asia/Shanghai`(中国标准时间,东八区)或`UTC`(协调世界时)。 - **GMT偏移格式**:例如`GMT%2B8`(需对`+`进行URL编码为`%2B`),但需注意驱动版本兼容性[^1][^4]。 - **编码规范**:参数间用`&`分隔,避免符号冲突(如`+`需转义为`%2B`)。 #### 3. **示例配置 - **中国时区**: ```java jdbc:mysql://localhost:3306/demo?serverTimezone=Asia/Shanghai&characterEncoding=utf-8 ``` - **UTC时区**(适用于全球统一时间): ```java jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&useSSL=false ``` #### 4. **常见问题解决** - **时差8小时**:若数据库时间与Java代码插入时间不一致,将`serverTimezone`设为本地时区(如`Asia/Shanghai`)而非`UTC`。 - **驱动兼容性**:某些旧版本MySQL驱动可能不支持`GMT+8`格式,优先使用标准时区名称。 - **IDE连接报错**:在IntelliJ等工具中配置数据库时,需在“Advanced”选项卡手动添加`serverTimezone`参数。 #### 5. **验证配置** 通过简单代码插入时间字段并查询数据库结果,确认时区转换是否准确: ```java // Java代码插入当前时间 PreparedStatement ps = connection.prepareStatement("INSERT INTO test(time_col) VALUES (?)"); ps.setTimestamp(1, new Timestamp(System.currentTimeMillis())); ps.executeUpdate(); ``` #### 6. **引用总结** - 设置`serverTimezone`是为了解决时区不匹配导致的时间转换错误。 - 使用`Asia/Shanghai`或`GMT%2B8`可避免东八区时差问题[^4]。 - JDBC驱动根据`serverTimezone`将Java时间转换为数据库时间字符串,与数据库自身时区配置无关[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值