在JDBC中,Connection类的创建方式有三种函数(不包括连接池)
一是:DriverManager.getConnection(String url),
二是:DriverManager.getConnection(String url,String user,String password);
三是:DriverManager.getConnection(String url,Properties info);
最简单的jdbc连接配置如下:
dbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://(host=host_or_ip):(port=port)/db?key1=value1&key2=value2&key3=value3...keyN=valueN
jdbc.username=root
jdbc.password=password
说明:
MySQL 8.0后版本驱动类名称为:"com.mysql.cj.jdbc.Driver"
如果用于配置JDBC URL的机制是基于XML来配置的,请使用XML字符文字&;分隔配置参数,因为符号(&)是XML的保留字符。
本文特别说明jdbc.url后其一些列配置属性的及其重要性;以下则为属性及其描述(Properties and Descriptions),由于官方提供的属性比较多, 在此我们主要列举一下常用的即可,具体更多可自己去MySQL官网查看,欢迎大家补充更多常用的配置属性。
连接/认证(Connection/Authentication.)
Properties
Descriptions
默认值(缺省值)
版本要求
注意事项
user
用于连接数据库
所有版本
一般不用
password
用于连接数据库
所有版本
一般不用
connectTimeout
和数据库服务器建立socket连接时的超时设置,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本
0
3.0.1版本起
socketTimeout
网络socket操作(读写)超时,单位:毫秒。 0表示永不超时 0
0
3.0.1版本起
高可用和集群(High Availability and Clustering.)
Properties
Descriptions
默认值(缺省值)
版本要求
注意事项
autoReconnect
驱动程序是否应尝试重新建立过时和/或死掉的连接?如果启用,驱动程序将对在旧连接或死连接上发出的属于当前事务的查询引发异常,但将在新事务中对该连接发出的下一个查询之前尝试重新连接。不建议使用此功能,因为当应用程序不能正确处理SQLExceptions时,它会产生与会话状态和数据一致性相关的副作用,并且仅当您无法将应用程序配置为正确处理因死掉和过时的连接而导致的SQLExceptions时才使用此功能。或者,作为最后一个选项,研究将mysql服务器变量“wait_timeout”设置为高值,而不是默认的8小时。
false
1.1版本起
依具体项目具体对待
autoReconnectForPools
使用适用于连接池的重新连接策略(默认为“false”)
false
3.1.3版本起
依具体项目具体对待
failOverReadOnly
在autoReconnect模式下进行故障转移时,连接是否应设置为“只读”?
true
3.0.12版本起
在使用数据库连接池的情况下,且autoReconnect=true时最好设置该参数:failOverReadOnly=false
maxReconnects
如果autoReconnect为true,则尝试重新连接的最大次数,默认为“3”。
3
1.1版本起
默认即可
initialTimeout
如果启用了autoReconnect,则在重新连接尝试之间等待的初始时间(以秒为单位,默认为“2”)。
2
1.1版本起
安全(Security.)
Properties
Descriptions
默认值(缺省值)
版本要求
注意事项
useSSL
与服务器通信时使用ssl(true/false),连接到MySQL5.5.45+、5.6.26+或5.7.6+时默认为“true”,否则默认为“false”
false|true(5.5.45+、5.6.26+或5.7.6+)
3.0.2版本起
在5.5.45+、5.6.26+或5.7.6+版本中,如果不使用SSL连接就要在urL中设置useSSL=false;否则会抛异常:Establishing SSL connection without server's identity verification is not recommended.
According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set.
For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'.
You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
杂(Miscellaneous.)
Properties
Descriptions
默认值(缺省值)
版本要求
注意事项
useUnicode
驱动程序在处理字符串时是否应使用Unicode字符编码?只应在驱动程序无法确定字符集映射时使用,或者您试图“强制”驱动程序使用MySQL本身不支持的字符集(例如UTF-8、gb2312或gbk),true / false ,默认为'true'
true
1.1g版本起
必须设置为true,可能会导致中文数据乱码问题
characterEncoding
如果'useUnicode'设置为true,那么驱动程序在处理字符串时应该使用什么字符编码?(默认为'自动检测')
自动检测
1.1g版本起
当useUnicode设置为true时,指定字符编码。比如可设置为UTF-8、gb2312或gbk
zeroDateTimeBehavior
当驱动程序遇到完全由零组成的日期时间值时(由MySQL用来表示无效日期),会发生什么?有效值为“exception”、“round”和“converttonull”。
exception
3.1.4版本起
一般设置为“converttonull”比较好,即转换为null即可,否则会抛异常:Caused by: java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp
serverTimezone
覆盖时区的检测/映射。当服务器的时区未映射到Java时区时使用
3.0.2版本起
当数据库时区未映射到Java时区时可能导致Java代码中Date类型插入到mysql中datetime类型出现时间不一致的问题。例如:
上海:serverTimezone=Asia/Shanghai
简写:serverTimezone=CTT
北京:serverTimezone=UTC+8
或者:serverTimezone=GMT+8
关于时区UTC和GMT
到此结束, 更多常用属性欢迎大家补充!!!