JDBC连接数据库设置 serverTimezone

问题描述

当在xml中设置 jdbc的连接信息时,在url中如果没有设置时区,就会报错。
image.png

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

image.png

分析

mysql的驱动jar包升级到了8.0版本以上。升级后从mysql中查出的时候,全都比数据库的时间多13小时,而且这些时间存到数据库的时间,有些是正确的时间,有时比正确时间少13小时,这样返回给前端的时间就不准确,解决这个问题只要在springboot的数据库连接配置中增加一段配置就能解决问题。

这个时区要设置好,不然会出现时差,
如果你设置serverTimezone=UTC,连接不报错,
但是我们在用java代码插入到数据库时间的时候却出现了问题。
比如在java代码里面插入的时间为:2018-06-24 17:29:56
但是在数据库里面显示的时间却为:2018-06-24 09:29:56
有了8个小时的时差
UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。

//北京时间==东八区时间!=北京当地时间
serverTimezone=GMT%2B8
//或者使用上海时间
serverTimezone=Asia/Shanghai

解决办法

在jdbc的连接设置中,url中添加时区设置 serverTimezone=Asia/Shanghai
或者是 serverTimezone=GMT%2B8

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JDBC连接数据库进行查询的步骤如下: 1. 首先,需要配置四个参数,包括驱动名称、数据库URL、用户名和密码。例如,可以使用以下配置参数: - 驱动名称: com.mysql.jdbc.Driver - 数据库URL: jdbc:mysql://localhost:3306/databaseName?useSSL=false&serverTimezone=UTC - 用户名: root - 密码: 123456 2. 确保已导入数据库对应的驱动包,例如,MySQL的驱动包是com.mysql.jdbc.Driver。 3. 使用Class.forName()方法加载驱动类。 4. 使用DriverManager.getConnection()方法创建数据库连接,传入数据库URL、用户名和密码。 5. 创建Statement对象,用于执行SQL查询语句。 6. 编写SQL查询语句,例如"select * from t_student where id=3"。 7. 使用Statement对象的executeQuery()方法执行查询,将查询结果保存在ResultSet对象中。 8. 使用ResultSet对象的next()方法判断是否还有下一条记录,如果有,则使用getXXX()方法获取指定列的值。例如,getInt()获取整型值、getString()获取字符串值。 9. 循环遍历所有的记录,打印出每条记录的相关列的值。 下面是一个示例代码,演示了如何使用JDBC连接数据库进行查询: ```java import java.sql.*; public class JdbcQueryExample { public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai", "root", "root"); Statement statement = conn.createStatement(); String sql = "select id, name, age, address from t_student"; ResultSet rs = statement.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String address = rs.getString("address"); int age = rs.getInt("age"); System.out.println("id: " + id + "; name: " + name + "; age: " + age + "; address: " + address); } rs.close(); statement.close(); conn.close(); } } ``` 请注意,以上代码只是一个示例,实际使用时需要根据具体的数据库配置进行修改。同时,需要注意数据库连接的关闭操作,以及异常处理的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用JDBC连接数据库,进行查询操作](https://blog.csdn.net/weixin_68946227/article/details/127601645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JDBC--连接数据库,查询数据库表中的记录](https://blog.csdn.net/Ysuhang/article/details/124596283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值