mysql数据库连接
1、利用druid进行数据库连接(尚servlet)
1.1先创建数据库和表
drop database if exists book;
create database book;
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','admin@atguigu.com');
select * from t_user;
1.2、编写数据库对应的javaBean
public class User {
private Integer id;
private String username;
private String password;
private String email;
}
1.1、src目录下的jdbc.properties文件
username=root
password=hushoutao
url=jdbc:mysql://localhost:3306/book?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=5
maxActive=10
1.2、编写JdbcUtils工具类(在utils下)
package com.atguigu.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcUtils {
private static DruidDataSource dataSource;
static {
try {
Properties properties = new Properties();
// 读取 jdbc.properties属性配置文件
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
// 从流中加载数据
properties.load(inputStream);
// 创建 数据库连接 池
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
System.out.println(dataSource.getConnection());//测试是否连接成功
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接池中的连接
* @return 如果返回null,说明获取连接失败<br/>有值就是获取连接成功
*/
public static Connection getConnection(){
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭连接,放回数据库连接池
* @param conn
*/
public static void close(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1.3、WEB-INF下的lib目录下要导入mysql-connector-java-8.0.15.jar和druid-1.1.9.jar
1.4、利用JdbcUtilsTest进行测试
package com.atguigu.test;
import com.atguigu.utils.JdbcUtils;
import org.junit.Test;
import java.sql.Connection;
/**
* @author hst
* @create 2020-12-07 11:45
* @Description:
*/
public class JdbcUtilsTest {
@Test
public void testJdbcUtils(){
for (int i = 0; i < 100; i++) {
Connection connection = JdbcUtils.getConnection();
System.out.println(connection);
JdbcUtils.close(connection);//数据库连接池中的连接在用完后一定要及时的释放,不然因为1.1中的jdbc.properties中设置了maxActive=10(数据库连接池中的连接数最大为10),所以最多只能连接10个
}
}
}
1.5、编写BaseDao(要先导入commons-dbutils-1.3.jar)
package com.atguigu.dao.impl;
import com.atguigu.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* @author hst
* @create 2020-12-07 12:06
* @Description:
*/
public abstract class BaseDao {
private QueryRunner queryRunner = new QueryRunner();
/**
* update()方法,用来执行Insert/update/Delete方法
* @param sql SQL语句
* @param args SQL中的参数(?,?,?)
* @return 返回-1表示失败,返回其它表示影响的行数
*/
public int update(String sql,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.update(conn,sql, args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(conn);
}
return -1;
}
/**
* 查询后返回一个javaBean的sql语句
* @param sql 执行的sql语句
* @param type 返回的对象类型
* @param args SQL对应的参数类型
* @param <T> 返回的类型的泛型
* @return
*/
public <T> T queryForOne(String sql,Class<T> type,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql, new BeanHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(conn);
}
return null;
}
/**
* 查询后返回多个javaBean的sql语句
* @param sql 执行的sql语句
* @param type 返回的对象类型
* @param args SQL对应的参数类型
* @param <T> 返回的类型的泛型
* @return
*/
public <T> List<T> queryForList(String sql,Class<T> type,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql, new BeanListHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(conn);
}
return null;
}
/**
* 执行返回一行一列的sql语句
* @param sql 执行的sql语句
* @param args sql对应的参数值
* @return
*/