error——Exception in thread “main“ java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is u

        注:由于我在网上搜了很久,并没有我这种情况的解决方法,所以我这种解决方法可能有点投机取巧,大概率帮不上忙。如果你已经尝试过更改jar包版本将mysql回收空闲连接的时间变长重启电脑手动打开数据库等方法,还是不能解决问题,那可以看一下本文。

        下载jar包的网站:Central Repository: mysql/mysql-connector-java

一、问题描述

        今天刚开始学JDBC,连接数据库的时候怎么也连不上,报错内容如下:

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:F:\idea\download\IntelliJ IDEA Community Edition 2021.3.3\lib\idea_rt.jar=61218:F:\idea\download\IntelliJ IDEA Community Edition 2021.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;F:\idea\test\out\production\test_demo;F:\idea\test\lib\mysql-connector-java-8.0.16.jar" com.itheima.jdbc.JDBCDemo
111
Exception in thread "main" com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
    at com.mysql.cj.jdbc.exceptions.

 我的代码是这样的:

package com.itheima.jdbc;

import com.sun.javaws.IconUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接
        String url="jdbc:mysql://localhost:3306/test";    //固定写法
        String username="root";
        String password="****";    //我的密码这个字符串就不展示了哈
        Connection conn = DriverManager.getConnection(url, username, password);

        //3.定义sql语句
        String sql="UPDATE db1 SET d_salary=1000 WHERE d_id=2";

        //4.获取执行sql的对象Statement
        Statement stmt = conn.createStatement();    //使用createStatement方法获取对象

        //5.执行sql
        int count = stmt.executeUpdate(sql);        //受影响的行数

        //6.处理结果
        System.out.println(count);

        //7.释放资源           
        stmt.close();
        conn.close();
    }
}

        我翻阅了无数个解决方案,有说jar包版本不匹配的,我用的8.0.16版本的jar包,应该不是这里的问题(其实是我不太清楚在哪儿查看MySQL的版本,不过确实不是这里的问题);也有说是因为MySQL数据库没有启动的原因,需要手动启动一下。不过虽然都有帮到很多人,可我无奈不是他们中的一员。

二、解决方法

        我突然想起来之前实训的时候做过项目,里面也有这部分内容,我就想着依葫芦画瓢看看是哪儿有问题。最终发现是把这里:

//2.获取连接
        String url="jdbc:mysql://localhost:3306/test";    //固定写法

        改为:

String url="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC&rewriteBatchedStatements=true"

        这样就可以了。其中test是我的数据库名称,后面的参数说实话我也只懂七七八八,至于为什么要加这些参数,我也确实不知道,有明白的大佬还请教我一下。

补充:

        修改后的url中“?”后面的useSSL是一种比较安全的链接方式,但是它需要比较复杂的配置,并且使用之后性能会降低一些,如果不设为false的话会报红字。而后面其他的是一些参数,用“&”隔开,具体啥意思目前还不太明白。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值