专栏首页13blog.siteSpring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数

Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数

在java程序与数据库连接的编程中,mysql jdbc url格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...

如:jdbc:mysql://localhost:3306/test?user=test&password=123456

刚好最近遇到一个数据库连接参数带来的问题,所以罗列一下几个较为重要的参数:

  • user 数据库用户名(用于连接数据库) 必要参数。
  • password 用户密码(用于连接数据库) 如果设置了密码的话同样为必要参数。
  • useUnicode 是否使用Unicode字符集,如果参数characterEncoding设置为utf-8或gbk,本参数值需设置为true,默认为false。
  • characterEncoding 允许用户自己设定数据库编码,指定字符编码,在程序与数据库交互时,如果数据的编码类型与数据库的编码类型不一致时,如程序中使用GBK,而数据库的数据类型为utf8,会出现传参无法识别导致无法得到预期的数据返回的问题。为了解决此问题,我们需要在URL上设置characterEncoding=utf8。

示例代码:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8

  • autoReconnect 当数据库连接异常中断时,是否自动重新连接, 默认值为false。
  • autoReconnectForPools 是否使用针对数据库连接池的重连策略, 默认值为false。 以上两个参数都是设置是否允许连接断开后自动重连,jdbc中mysql的连接在长时间的连接后,可能会出现断连或者出现数据库突然宕机的状况。重启数据库服务可能也会继续报异常,只有重启应用重新连接才可以避免继续报错,为了解决这种问题,一般会设置此参数,这时可以使用这个参数来要求jdbc 驱动在发现数据库连接异常后会自动地重新连接。在使用数据连接池的情况,如使用DBCP或者c3p0连接池,应尽量使用autoReconnectForPools。
  • connectTimeout 和数据库服务器建立socket连接时的超时,单位:毫秒, 0表示永不超时。
  • socketTimeout socket操作(读写)超时,单位:毫秒,0表示永不超时 。

JDBC使用socket与数据库连接,数据库并不对应用与数据库间的连接超时进行处理,JDBC的socket timeout在数据库被突然停掉或是发生网络错误(由于设备故障等原因)时十分重要。由于TCP/IP的结构原因,socket没有办法探测到网络错误,因此应用也无法主动发现数据库连接断开。如果没有设置socket timeout的话,应用在数据库返回结果前会无期限地等下去,这种连接被称为dead connection。为了避免dead connections,socket必须要有超时配置。socket timeout可以通过JDBC设置,socket timeout能够避免应用在发生网络错误时产生无休止等待的情况,缩短服务失效的时间。

此参数为jdbc的过期时间设置,与mysql-server的过期时间不是同一参数。

  • socket连接时的timeout:通过Socket.connect(SocketAddress endpoint, int timeout)设置
  • socket读写时的timeout:通过Socket.setSoTimeout(int timeout)设置

示例代码:jdbc:mysql://localhost:3306/test?connectTimeout=60000&socketTimeout=60000

以上为整理的较为常用的参数,如果感兴趣可以去官网查阅一下其他参数。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring+SpringMVC+MyBatis+easyUI整合进阶篇(八)线上Mysql数据库崩溃事故的原因和处理

    前文提要 承接前文《一次线上Mysql数据库崩溃事故的记录》,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑。 由于时间...

    我是十三
  • Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

    前言 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到...

    我是十三
  • Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

    前言   在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录。本文就是写一下发现问题的过程及解决方法...

    我是十三
  • Mysql主从同步

    大多数人都很清楚,在高并发的时候,如果所有的数据库操作都只通过一台数据库来操作,那数据库很大程度可能出现宕机,而宕机就有可能导致数据丢失,造成不良后果。所以在并...

    逆月翎
  • java数据库操作

    数据库访问几乎每一个稍微成型的程序都要用到的知识,怎么高效的访问数据库也是我们学习的一个重点,今天的任务就是总结java访问数据库的方法和有关API,java访...

    企鹅号小编
  • MySQL数据库界面化工具 - Navicat

    本文使用的工具版本为:Navicat Premium 15,文中提到的功能在旧版中同样支持,如果需要最新版的软件(Mac/Windows)可私信博主。

    聚沙成塔
  • 2020 年祝愿与 wishs

    新年的气氛越来越浓了,朋友圈里面回家的信息SHOW 越来越多,2019年过的的确时不容易,很多都不想再提,都是一把辛酸泪。

    AustinDatabases
  • Confluence 6 Oracle 测试你的数据库连接

    在你的数据库设置界面,有一个 测试连接(Test connection)按钮可以检查:

    HoneyMoose
  • 越来越火的图数据库究竟是什么

    既然图数据库应用这么广泛,越来越多的企业和开发者开始使用它,那它究竟什么过人之处呢,下面我们来揭开它的神秘面纱。

    mantou
  • 我们对比了5款数据库,告诉你NewSQL的独到之处

    对大多数开发人员而言,SQL 以及 MySQL、PostgreSQL 等关系数据库管理系统(即 RDBMS)并不陌生。RDBMS 的基本架构原则已历经了数十年的...

    华章科技

扫码关注云+社区

领取腾讯云代金券