java使用Druid连接池连接mysql
1.先在mysql创建需要的数据库和表
use book; create table t_user( `id` int primary key auto_increment, `username` varchar(20) not null unique, `password` varchar(32) not null, `email` varchar(200) ); insert into t_user(`username`,`password`,`email`) values(‘admin‘,‘admin‘,‘‘); select * from t_user;
2.编写与数据库表对应的javaBean对象
package com.atguigu.pojo;
//数据库表对应的javaBean对象
public class User {
private int id;
private String username;
private String password;
private String email;
public User() {}
public User(int id, String username, String password, String email) {
super();
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + "]";
}
}3.编写工具类JdbcUtil
3.1先导入需要的jar包(数据库和连接池需要):

3.2、在src源码目录下编写jdbc.properties属性配置文件
initialSize=5maxActive=10driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8username=rootpassword=123456
注意:
1.如果你在url这么没有添加“?characterEncoding=utf8”,有可能会出现以下错误:
Unknown initial character set index ‘255‘ received from server. Initial client character set can be forced via the ‘characterEncoding‘ property.
从服务器收到的未知初始字符集索引“255”。初始客户端字符集可以通过“字符编码”属性强制设置。
2、如果你连接的mysql数据库是8.0及以上的,driver要记得改为:‘com.mysql.cj.jdbc.Driver‘,否则会报错。详细看https://blog.csdn.net/superdangbo/article/details/78732700
3.3、编写数据库工具类JdbcUtil
Druid数据库连接池有两种使用方式:
1.直接设置数据源参数并建立连接池
2.Properties配置数据源,读取数据源并建立连接池
方式一:直接设置数据源参数并建立连接池
package com.atguigu.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.sql.Connection;
public class JDBCUtil {
private static DruidDataSource dataSource;
static {
try {
dataSource= new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setInitialSize(5);
dataSource.setMaxActive(10);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取数据库连接池中的连接
* @return 如果返回null,说明连接失败,有值就是获取连接成功
*/
public static Connection getConnection() {
Connection conn=null;
try {
conn=(Connection)dataSource.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭连接,放回数据库连接池
* @param conn
*/
public static void close(Connection conn) {
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}方式二:Properties配置数据源,读取数据源并建立连接池(Properties文件看3.2)
package com.atguigu.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
//import com.mysql.jdbc.Connection;
import java.sql.Connection;
public class JdbcUtil {
private static DruidDataSource dataSource;
static {
try {
Properties properties=new Properties();
//读取jdbc.properties属性配置文件
InputStream is=JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
//从流中记载数据
properties.load(is);
//创建数据库连接池
dataSource= (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取数据库连接池中的连接
* @return 如果返回null,说明连接失败,有值就是获取连接成功
*/
public static Connection getConnection() {
Connection conn=null;
try {
conn=(Connection) dataSource.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭连接,放回数据库连接池
* @param conn
*/
public static void close(Connection conn) {
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}3.4、JdbcUtil测试
package com.atguigu.test;
import org.junit.Test;
import com.alibaba.druid.util.JdbcUtils;
import com.atguigu.util.JdbcUtil;
//import com.mysql.jdbc.Connection;
import java.sql.Connection;
public class JdbcUtilsTest {
public static void main(String []args) {
Connection connection = JdbcUtil.getConnection();
System.out.println(connection);
JdbcUtils.close(connection);
}
}结果:

最后:我遇到的坑有无数个,我搞了一下午,才弄好,哭泣。。。。
1、如果你遇到错误:Cause: java.sql.SQLException: Unknown initial character set index ‘255‘ received from server.
2、如果遇到Client does not support authentication protocol requested by server; consider upgrading MySQL client这个错误,有可能需要把用户密码登录的加密规则还原成mysql_native_password这种加密方式。如何修改可以参考这篇文章:https://blog.csdn.net/numberseven7/article/details/99548745