文章目录
一. 导入druid.jar包(德鲁伊)
1、导入德鲁伊连接池jar包,并把它放在lib目录下
这里博主提供了一下我用jar包的链接:
链接:https://pan.baidu.com/s/13hMKnv6LMBkmocK936qScw?pwd=1111
提取码:1111
2、编写德鲁伊连接池代码
(1) 在src目录下创建properties类型配置文件,设置数据库连接池信息。
例:
url=jdbc:mysql://localhost:3306/db2
username=root
password=root
driverClassName=com.mysql.jdbc.Driver
initialSize=10
maxActive=20
maxWait=1000
(2)【进行测试】: 在自己项目目录下创建pool包,并在pool包下创建一个PoolDemo1.class文件,文件写:
/**
* 德鲁伊连接池
*/
public class PoolDemo1 {
public static void main(String[] args) throws Exception {
//读取properties内容
Properties properties = new Properties();
//properties.load(new FileInputStream("C:\\Users\\lenovo\\Desktop\\0621\\jdbc_database\\src\\db.properties"));
//通过类加载器读取类路径下内容
properties.load(PoolDemo1.class.getClassLoader().getResourceAsStream("db.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//通过返回数据源对象,获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
(3). **【书写工具类】:**在pool包下创建一个JdbcUtils.class文件,文件写:
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* 数据库连接池工具类
*/
public class JdbcUtils {
//定义成员变量
private static DataSource dataSource;
private static ThreadLocal<Connection> threadLocal;
//静态代码块
static {
try {
//加载连接池配置文件,创建DataSource
Properties properties = new Properties();
properties.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
dataSource = DruidDataSourceFactory.createDataSource(properties);
//初始化threadLocal对象
threadLocal = new ThreadLocal<>();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取数据库连接池连接
public static Connection getConnection() {
//1 ThreadLocal可以把线程和连接绑定在一起
//从ThreadLocal获取连接
Connection connection = threadLocal.get();
//如果获取不到,dataSource取出来,放到ThreadLocal里面
if(connection == null) {
try {
connection = dataSource.getConnection();
threadLocal.set(connection);
} catch (SQLException e) {
e.printStackTrace();
}
}
//如果获取到,直接返回
return connection;
}
//释放资源
public static void closeResource() {
Connection connection = threadLocal.get();
if(connection != null) {
try {
//close()
connection.close();
threadLocal.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
(4). 【书写测试类】在pool包下创建一个文件TestUtils.java ,文件写:
import com.atguigu.dbutils.Dept;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class TestUtils {
public static void main(String[] args) {
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
//获取数据库连接
Connection connection = JdbcUtils.getConnection();
String sql = "select * from dept";
preparedStatement = connection.prepareStatement(sql);
rs = preparedStatement.executeQuery();
List<Dept> list = new ArrayList();
while(rs.next()) {
int did = rs.getInt("did");
String dname = rs.getString("dname");
Dept dept = new Dept();
dept.setDid(did);
dept.setDname(dname);
list.add(dept);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
preparedStatement.close();
JdbcUtils.closeResource();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
二. 导入dbutils.jar包
1. 导入dbutils.jar包并把它放在lib目录下
这里博主同样提供了一下我用jar包的链接:
链接:https://pan.baidu.com/s/1u_USlgpOH3Td8oa-DMb3-Q?pwd=1111
提取码:1111
2.进行配置
- 在自己项目目录下创建dbutils包,并在dbutils包下创建一个DBUtilsDemo1.java文件,文件写:
(使用dbutils进行添加,修改,删除操作)
import com.atguigu.pool.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import java.sql.SQLException;
public class DBUtilsDemo1 {
//删除操作
@Test
public void test03() throws Exception {
//创建QueryRunner对象
QueryRunner queryRunner = new QueryRunner();
// 编写sql语句
String sql = "delete from dept where did=?";
//调用方法执行sql
queryRunner.update(JdbcUtils.getConnection(),sql,200);
//释放资源
JdbcUtils.closeResource();
}
//修改操作
@Test
public void test02() throws Exception {
//创建QueryRunner对象
QueryRunner queryRunner = new QueryRunner();
// 编写sql语句
String sql = "update dept set dname=? where did=?";
//调用方法执行sql
queryRunner.update(JdbcUtils.getConnection(),sql,"研发测试部",200);
//释放资源
JdbcUtils.closeResource();
}
//添加操作
@Test
public void test01() throws Exception {
//创建QueryRunner对象
QueryRunner queryRunner = new QueryRunner();
// 编写sql语句
String sql = "insert into dept values(?,?)";
//调用方法执行sql
queryRunner.update(JdbcUtils.getConnection(),sql,200,"测试部");
//释放资源
JdbcUtils.closeResource();
}
}
2…在dbutils包下创建一个Dept.java文件,文件写:
public class Dept {
private int did;
private String dname;
public int getDid() {
return did;
}
public void setDid(int did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Dept{" +
"did=" + did +
", dname='" + dname + '\'' +
'}';
}
}
3.在dbutils包下创建一个DBUtilsDemo2.java文件,文件写:
(使用dbutils进行查询操作)
import com.atguigu.pool.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;
import java.util.List;
public class DBUtilsDemo2 {
//查询操作-返回多条记录
@Test
public void test02() throws Exception {
QueryRunner runner = new QueryRunner();
String sql = "select * from dept";
List<Dept> list =
runner.query(JdbcUtils.getConnection(), sql, new BeanListHandler<Dept>(Dept.class));
System.out.println(list);
JdbcUtils.closeResource();
}
//查询操作-返回一条记录
@Test
public void test01() throws Exception {
//创建QueryRunner对象
QueryRunner runner = new QueryRunner();
//编写sql
String sql = "select * from dept where did=?";
//调用方法执行sql语句
Dept dept =
runner.query(JdbcUtils.getConnection(),sql,new BeanHandler<Dept>(Dept.class),1);
System.out.println(dept);
//释放资源
JdbcUtils.closeResource();
}
}
三. Dao层操作数据库最终封装
1.在自己项目目录下创建standard.dao包,并在standard.dao包下创建一个DeptDao的接口(interence)文件,
import java.util.List;
public interface DeptDao {
//添加
public void insertDept(Dept dept);
//修改
public void updateDept(Dept dept);
//删除
public void removeDept(int did);
//根据id查询
public Dept findDeptById(int did);
//查询所有记录
public List<Dept> findAll();
}
2.在standard.dao包下创建一个impl包,并在impl包下创建一个DeptDaoImpl.java文件
import java.util.List;
public class DeptDaoImpl extends BasicDeptDaoImpl implements DeptDao {
@Override
public void insertDept(Dept dept) {
}
@Override
public void updateDept(Dept dept) {
}
@Override
public void removeDept(int did) {
}
@Override
public Dept findDeptById(int did) {
String sql = "select * from dept where did=?";
Dept dept = getBean(JdbcUtils.getConnection(), sql, Dept.class, did);
return dept;
}
@Override
public List<Dept> findAll() {
String sql = "select * from dept";
List<Dept> listBean = getListBean(JdbcUtils.getConnection(), sql, Dept.class);
return listBean;
}
}
3.在impl包下创建一个BasicDeptDaoImpl.java文件
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class BasicDeptDaoImpl {
//封装查询返回一条记录
public <T> T getBean(Connection conn,String sql,Class<T> type,Object...params) {
QueryRunner runner = new QueryRunner();
try {
T t = runner.query(conn, sql, new BeanHandler<T>(type), params);
return t;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//封装查询返回多条记录
public <T> List<T> getListBean(Connection conn,String sql,Class<T> type,Object...params) {
QueryRunner runner = new QueryRunner();
try {
List<T> list = runner.query(conn, sql, new BeanListHandler<T>(type), params);
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
这是jdbc连接mysql进行配置一的博客连接:
jdbc 连接mysql 8.0 以上版本出现的错误解决