数据库连接池之Druid
2021-12-17 本文已影响0人
每天起床都想摆
数据库连接池
简介
- 数据库连接池是个容器,负责分配,管理数据库连接
- 它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
- 释放空间时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库而引起的数据库连接遗漏
- 优点
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
数据库连接池实现
-
标准接口:DataSource
-
官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口
-
功能:获取链接
Connection getConnection()
-
-
常见的数据库连接池
- DBCP
- C3P0
- Druid(德鲁伊)
-
Druid常见配置
[图片上传失败...(image-fd29fd-1639755711261)]QJ.png)
Druid数据库登录验证访问
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.*;
import java.io.*;
import java.sql.*;
import java.util.*;
public class complex {
public static void main(String[] args) throws Exception {
//1.导入jar包(存放于项目文件夹下lib文件夹,并添加为库)
//2.定义配置文件(使用VScode配置文件Druid.properties)
//3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("D:/Code/JavaWeb/test/test01/src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.获取数据库连接Connection
Connection connection = dataSource.getConnection();
System.out.println(connection);
//login表已存储对应数据
String name = "ZXJ";
String password = "abcd";
//在双引号里面先使用单引号,再往单引号中使用双引号实现引号的嵌套,中间再使用++,就可以进行字符串和变量的拼接操作
//在这里,sql语句获取用户输入的账号和密码同数据库中的数据进行匹配以判断是否可以登录
//String sql = "select * from tb_user where username = '"+username+"' and password = '"+password+"'; ";
//预防SQL注入
String sql = "select * from login where username = ? and password = ?";
//获取pstmt对象
PreparedStatement pstmt = connection.prepareStatement(sql);
//设置?的值
pstmt.setString(1,name);
pstmt.setString(2,password);
//执行SQL
ResultSet rs = pstmt.executeQuery();
//判断登录是否成功
if (rs.next()){
System.out.println("登陆成功");
}else{
System.out.println("登录失败");
}
rs.close();
pstmt.close();
connection.close();
//用于获取Druid配置文件properties下的url地址
//System.out.println(System.getProperty("user.dir"));
}
}
//配置文件Druid.properties,使用VScode编写,后缀名为properties
/*
# 关于可能引发的错误,检查url参数配置问题
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///school?useSSL=false&useServerPrepStmts=true #useServerPrepStmts=true主动打开SQL预编译功能
username=root
password=ZZXQJL@0916.com
# 初始连接数
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
*/
//login表
/*
create table login(
username varchar(255) not null,
password varchar(255) not null
);
insert into login values ("ZXJ" , "ABC123");
insert into login values ("PYJ" , "abcdefg");
*/
在IDEA中:
快捷键Ctrl+R可以快速替换查找相同文本并替换
快捷键Alt+MouseLeft可以快速整列的处理数据
快捷键Alt+Inseter可以快速生成对应的Getter/Setter方法
在书写包装类的时候,对于原数据库的字段名的编写,需要注意:
SQL语句不区分大小写,所以下划线命名模式在实体类中需要改成驼峰模式
在实体类中,基本数据类型建议使用其对应的包装类型,原因在于,
基本类型有默认值,如int为0,包装类型Integer的默认值为null,不会对业务产生影响