MySql的JDBC连接url地址的各项配置说明及所解决的问题

这篇具有很好参考价值的文章主要介绍了MySql的JDBC连接url地址的各项配置说明及所解决的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先看一条jdbc的url地址:

 `url: jdbc:mysql://127.0.0.1:3306/test?useAffectedRows=true&autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai`

接下来将逐步解析里面的配置及所解决的问题

1.useAffectedRows=true

当我们进行update操作时,时常会根据update的结果进行一些逻辑判断,如返回值大于1表示更新成功,为0表示更新失败。
但是使用Mysql驱动连接数据库并进行update操作时,返回值可能不在预期。

如SQL1:update task_info SET task_status=2 where id=?
这个sql无论执行多少遍,update返回值都可能是1。原因在于MySQL的连接URL。
对mysqlURL进行修改,添加参数useAffectedRows=true

jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useAffectedRows=true

useAffectedRows的作用在于是否用受影响的行数替代查找到的行数来返回数据,默认 false。指定这个值后,更新时会返回更新的行数,按照SQL1执行update操作也会返回正常值,即第一次返回1,第二次返回0.

2.autoReconnect=true

连接数据库超时设置autoReconnect=true,默认重试次数调整

驱动程序是否应该尝试重新建立连接? 如果启用了,驱动程序将会对陈旧或死亡连接上发出的查询抛出异常,这些查询属于当前事务,但是在新事务中对连接发出的下一个查询之前会尝试重新连接。 不推荐这个功能的使用,因为它有副作用与会话状态和数据一致性当应用程序不妥善处理异常,仅设计用于当你无法配置您的应用程序来处理异常造成死亡和陈旧的正确连接。 另外,作为最后一个选项,研究将MySQL服务器变量“wait_timeout”设置为一个较高的值,而不是默认的8小时。

3.useUnicode=true&characterEncoding=utf-8

mysql数据库用的是gbk编码,而项目的mysql数据库需要的是utf-8编码,所以在url后面添加useUnicode=true&characterEncoding=utf-8",表示在往数据库中存数据时会用UTF-8的格式将数据解码为字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。从数据库中取数据时,会将数据按GBK格式解码为字节码,然后再将字节码重新按照UTF-8格式编码数据返回给客户端

4.allowMultiQueries=true

MySQL连接数据库时,添加语句:“allowMultiQueries=true”的作用:
1.可以在sql语句后携带分号,实现多语句执行。
2.可以执行批处理,同时发出多个SQL语句。
数据库url配置,mysql,数据库,java

5.zeroDateTimeBehavior=convertToNull

在查询 Mysql 数据库的时候,有时候会产生一个异常:

Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp. Stacktrace follows:

java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp


Datetimes with all-zero components (0000-00-00 ...): These values cannot be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet. 

关键在于在 Mysql 里 0000-00-00 00:00:00 可能是有效的;而在 Java 中,这样的转换是无效的。

因此,Mysql JDBC 驱动将抛出一个 java.sql.SQLException ,因为 Java 不能识别 0000-00-00 00:00:00 这样的日期格式。

6.useSSL=false

SSL一种加密协议
数据库url配置,mysql,数据库,java

发现在MySQL5.7之前的版本,安全性较低,存在任何用户都可以连接上的 test 库,所以官方在5.7版本加大了对隐私的保护。并且采用了默认 useSSL = true值防止对数据库的随意修改,到了8.0版本,仍然保留了SSL,并且默认值为 true,所以只要将 “?useSSL= false” 放在url表名后即可。

7.allowPublicKeyRetrieval=true

如果用户使用 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA
公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA
公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是
AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启

8.serverTimezone=Asia/Shanghai

时区设置不妥可能会产生各种问题,下面我们列举下几个常见的问题及解决方法:

8.1 MySQL 内部时间不是北京时间

遇到这类问题,首先检查下系统时间及时区是否正确,然后看下 MySQL 的 time_zone,建议将 time_zone 改为’+8:00’。

8.2 Java 程序存取的时间与数据库中的时间相差 8 小时

出现此问题的原因大概率是程序时区与数据库时区不一致导致的。我们可以检查下两边的时区,如果想统一采用北京时间,则可以在 jdbc 连接串中增加 serverTimezone=Asia/Shanghai,并且 MySQL 方面也可以将 time_zone 改为’+8:00’。

8.3 程序时间与数据库时间相差 13 小时或 14 小时

如果说相差 8 小时不够让人惊讶,那相差 13 小时可能会让很多人摸不着头脑。出现这个问题的原因是 JDBC 与 MySQL 对 “CST” 时区协商不一致。因为 CST 时区是一个很混乱的时区,有四种含义:

美国中部时间 Central Standard Time (USA) UTC-05:00 或 UTC-06:00
澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
中国标准时 China Standard Time UTC+08:00
古巴标准时 Cuba Standard Time UTC-04:00
MySQL 中,如果 time_zone 为默认的 SYSTEM 值,则时区会继承为系统时区 CST,MySQL 内部将其认为是 UTC+08:00。而 jdbc 会将 CST 认为是美国中部时间,这就导致会相差 13 小时,如果处在冬令时还会相差 14 个小时。

解决此问题的方法也很简单,我们可以明确指定 MySQL 数据库的时区,不使用引发误解的 CST,可以将 time_zone 改为’+8:00’,同时 jdbc 连接串中也可以增加 serverTimezone=Asia/Shanghai。文章来源地址https://www.toymoban.com/news/detail-601034.html

到了这里,关于MySql的JDBC连接url地址的各项配置说明及所解决的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Failed to load driver class com.mysql.cj.jdbc.Driver异常-IntellIJ Idea-后端项目连接数据库配置

    前言 :后端项目连接数据库配置时,添加了如下application.properties的数据库连接配置 项目点击运行,就出现以下系列问题 这种情况通常是由于以下原因之—引起的: 1.没有在项目中引入mysql-connectorjar包,或者引入的包版本与JDBC驱动不匹配。解决方法:在项目pom.xml中添加相关依

    2024年02月07日
    浏览(132)
  • 【项目】基于JDBC+MySQL的Java教务管理系统(附源码+论文说明)

    摘要 随着信息技术的不断发展,教育管理也在向数字化、智能化方向迈进。Java作为一种广泛应用于企业级应用开发的编程语言,与数据库技术的结合更是为教务管理系统的开发提供了强大的支持。 本文将介绍基于JDBC(Java Database Connectivity)和MySQL数据库的Java教务管理系统的

    2024年04月25日
    浏览(34)
  • Spring报错:create connection SQLException, url: jdbc:mysql://localhost:3306/mm, errorCode 1251, state

    首先将url改成 依然报错  后来发现是mysql-connect的jar包版本不对,我连接的mysql数据库是8.0版本的 然而使用的jar包是5.0版本的。将mysql-connect的jar包版本改为8.0即可

    2024年02月04日
    浏览(36)
  • Java两种拼接http Get请求参数URL连接地址的方法

    直接上代码吧,简单直接, 第一种,用String.format() 第二种:用Uri构造器 执行效果如下图:一模一样:

    2024年02月11日
    浏览(48)
  • Failed to load driver class com.mysql.cj.jdbc.Driver异常-IntellIJ Idea-后端项目连接数据库_添加MyBatis依赖配置问题

    前言 :后端项目连接数据库配置时,添加了如下application.properties的数据库连接配置 项目点击运行,就出现以下系列问题 这种情况通常是由于以下原因之—引起的: 1.没有在项目中引入mysql-connectorjar包,或者引入的包版本与JDBC驱动不匹配。解决方法:在项目pom.xml中添加相关依

    2024年02月05日
    浏览(81)
  • CrystalDiskInfo 各项参数说明电脑硬盘详细参数

    CrystalDiskInfo 各项参数说明 Mr_Pmc 于 2021-02-24 19:02:52 发布 27571  收藏 39 分类专栏: Apple 文章标签: 服务器 负载均衡 版权 华为云开发者联盟 该内容已被华为云开发者联盟社区收录 加入社区 Apple 专栏收录该内容 4 篇文章0 订阅 订阅专栏 当前值(value) 当前值是各ID项在硬盘运

    2024年02月05日
    浏览(54)
  • tomcat连接mysql及JDBC详解

    1、Tomcat简介 Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和JSP 规范总是能在 Tomcat 中得到体现,Tomcat 5 支持最新的 Servlet 2.4 和 

    2024年01月18日
    浏览(40)
  • java连接mysql8.0数据库—jdbc连接

    mysql官网 点击platform Independent ,然后出现jar包选项 点download 点左下角no thanks,直接下载 原始方法,直接在项目下建一个lib包 然后将刚刚下好的zip解压,复制jar包到该目录下,右键jar包,选择add as Library 出现一堆包,表示成功导入jar包 注意:Driver类创建时,要导入com.mysql.cj.

    2024年02月13日
    浏览(65)
  • 【JDBC】Java连接MySQL数据库

    数据库编程指的是通过编程语言与数据库进行交互和操作的过程,包括使用编程语言创建、连接、查询、更新和删除数据库中的数据,以及管理数据库结构和其他相关工作等。 另外,不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包

    2024年02月15日
    浏览(142)
  • mysql连接错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    目录 一、遇到问题 二、找到报错具体原因  三、解决办法  在电脑上面有多个mysql版本的时候。可能会启用之前的mysql版本的执行路径,所以导致出现了这个mysql连接错误。 com.mysql.jdbc.exceptions.jdbc4.Commu

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包