连接池概述:
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
作用:
- 提高项目的性能.
就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
DBCP: (apache组织)
-
使用步骤:
1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)
2.配置文件:dbcp.properties
3.使用:两种使用方式方式一:硬编码方式,所有的数据库要是参数或者连接池要的参数用代码设置 方式二:将配置参数单独写在配置文件当中
public class JDBCDemo2 {
public static void main(String[] args) throws Exception {
//1.导入DBCP的两个jia包 记得依赖一下,数据库驱动不要忘了
//2.使用:两种使用方式:1.硬编码的方式,所有的数据库要的参数,或者说连接池要的参数用代码设置
//3.方式2:将配置参数单独写在配置文件当中
test1();
test2();
return;
}
private static void test2() throws Exception {
Properties properties = new Properties();
properties.load(new FileInputStream("./src/dbcp.properties"));
//配置文件的方式
DataSource ds = new BasicDataSourceFactory().createDataSource(properties);
Connection conn = ds.getConnection();
String sql = "insert into bank values(?,?)";
//获取操作对象
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "王五2");
statement.setInt(2, 1000);
statement.executeUpdate();
statement.close();
}
private static void test1() throws SQLException {
//创建连接池对象
BasicDataSource ds = new BasicDataSource();
//设置参数
ds.setUrl("jdbc:mysql:///mytestdb");
ds.setUsername("root");
ds.setPassword("123456");
ds.setDriverClassName("com.mysql.jdbc.Driver");
//从链接池中获取连接对象
Connection conn = ds.getConnection();
String sql="insert into bank values(?,?)";
//获取操作对象
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1,"王五");
statement.setInt(2,1000);
statement.executeUpdate();
ds.close();
statement.close();
}
}
C3P0
hibernate和spring使用
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
- 使用步骤:
-
导入c3p0-0.9.1.2.jar
-
配置文件的名称:c3p0.properties 或者 c3p0-config.xml,记得依赖一下
-
使用:两种使用方式
方式一:硬编码方式,所有的数据库要是参数或者连接池要的参数用代码设置 方式二:将配置参数单独写在配置文件当中
public class C3P0Demo {
public static void main(String[] args) throws PropertyVetoException, SQLException {
test();
test1();
}
private static void test1() throws SQLException {
//C3P0:使用配置文件的方式,有两点要求 1.配置文件的文件名,不能更改,2,配置文件要放到src目录下
//使用c3p0.xml配置文件,可以设置第二配置,那么你要用第二配置,把第二配置的配置名写上就可以了
ComboPooledDataSource ds = new ComboPooledDataSource("hehe");
Connection conn = ds.getConnection();
System.out.println(conn);
String sql = "insert into bank values(?,?)";
//获取操作对象
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "王五5");
statement.setInt(2, 1000);
statement.executeUpdate();
statement.close();
}
private static void test() throws PropertyVetoException, SQLException {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setUser("root");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mytestdb");
ds.setPassword("123456");
ds.setDriverClass("com.mysql.jdbc.Driver");
//获取操作对象
Connection conn = ds.getConnection();
String sql = "insert into bank values(?,?)";
//获取操作对象
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "王五3");
statement.setInt(2, 1000);
statement.executeUpdate();
statement.close();
}
}
druid:
- 使用步骤:
1.导入druid-1.1.9.jar
2. 配置文件的名称:db_server.properties
2. 使用:两种使用方式
方式一:硬编码方式,所有的数据库要是参数或者连接池要的参数用代码设置
方式二:将配置参数单独写在配置文件当中
public class DruidDemo {
public static void main(String[] args) throws Exception {
//德鲁伊连接池 阿里出品,号称史上最好的的数据库连接池产品
Properties properties = new Properties();
properties.load(new FileInputStream("./src/db_server.properties"));
DataSource source = DruidDataSourceFactory.createDataSource(properties);
Connection conn = source.getConnection();
String sql = "insert into bank values(?,?)";
//获取操作对象
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "王五5");
statement.setInt(2, 1000);
statement.executeUpdate();
statement.close();
}
private static void test() throws SQLException {
//硬编码
DruidDataSource dataSource = new DruidDataSource();
//设置参数
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mytestdb");
dataSource.setInitialSize(5);
dataSource.setMinIdle(1);
dataSource.setMaxActive(10);
//获取连接对象
DruidPooledConnection conn = dataSource.getConnection();
String sql = "insert into bank values(?,?)";
//获取操作对象
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, "王五5");
statement.setInt(2, 1000);
statement.executeUpdate();
statement.close();
}
}
druid 配置加密过后的数据库密码
-
1、找到本地druid的jar包:
-
2、在你的jar包所在位置按shift键打开命令窗口:
-
3、调用jar包生成公钥私钥和加密密码:
执行语句:java -cp druid-1.1.8.jar com.alibaba.druid.filter.config.ConfigTools 123456; – 123456就是你的数据库密码
注意jar包名称不要写错了,你的是哪个版本的就写 druid-xxx.jar
从生成的信息中复制加密后的密码和公钥
生成信息如下
PS C:\Users\SHEN-MOU-MOU\Desktop\阿里Druid德鲁伊连接池使用文档\jar包和配置文件> java -cp druid-1.1.9.jar com.alibaba.dru
id.filter.config.ConfigTools 123456
privateKey:MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAuqgSnyL7pUhO3jBCZNN3gr1dtUWvgCWmVO8ACMkZOrxtpqFGdEbWcaJy8jlun
7etKfOuJbtHsh40UVaykZn5WQIDAQABAkBWVyZ9/CWhN8hbmMEteHAAxu2Qy1I6GbBN+1vttG/6LaBuR/5mWJNxKzQ15kaR4Ec/fUyid16umrhdXmqrMFGxA
iEA/3FuDCpFMAKM1xdoQJ+THaC2rkoi383eKXslIRR+5MUCIQC7EEBJLJXfZ151LWS0OirZ1Y549vbmfoW4MksA2hCThQIgeCx1CWQZiKyqdcadVUm9fILPb
s+R+JhxnDJDFXz+9cECIAX8SiJNQ+pnE1WqgytlJRPdSnbCaDoN2FeBfHblg1xFAiAchzoVaMEa8LiRW6d/kq8pfF0d95RovWOcIddcB4oT8Q==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALqoEp8i+6VITt4wQmTTd4K9XbVFr4AlplTvAAjJGTq8baahRnRG1nGicvI5bp+3rSnzriW7R7IeNF
FWspGZ+VkCAwEAAQ==
password:YF0S/i+LLGQAEXF+1lMtUxOH+cvDoeaNi97RYEgndbG4tIso8U556im0WVLoPd5vMqbNKG7SlFGagm6Jcl0uJg==
从以上信息中复制 password 和 publicKey 配置到你的配置文件中
driver=com.mysql.jdbc.Driverurl=jdbc:mysql:///mytestdb
username=root
#生成的公钥
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALqoEp8i+6VITt4wQmTTd4K9XbVFr4AlplTvAAjJGTq8baahRnRG1nGicvI5bp+3rSnzriW7R7IeNFFWspGZ+VkCAwEAAQ==
#经过加密以后的密码
password:YF0S/i+LLGQAEXF+1lMtUxOH+cvDoeaNi97RYEgndbG4tIso8U556im0WVLoPd5vMqbNKG7SlFGagm6Jcl0uJg==
#最大连接数
maxActive=3
然后在代码中读取配置文件的信息
public class DruidDemo {
public static void main(String[] args) throws IOException, SQLException {
//私钥 公钥
//使用私钥要对密码加密
//使用公钥对密码进行解密
Properties prop = new Properties();
//加载配置文件
prop.load(new FileInputStream("./src/druid_info.prperties"));
//读取配置文件中的信息自己手动读取出来
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
String maxActive = prop.getProperty("maxActive");
String publickey = prop.getProperty("publicKey");
//把读取出来的参数设置给连接池
DruidDataSource ds = new DruidDataSource();
//设置数据库的信息
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(maxActive));
//config:使用ConfigFilter解密,Stat:启动监控功能StatFilter
ds.setFilters("config,stat");
//设置解密使用的publickey
ds.setConnectionProperties("config.decrypt=true;config.decrypt.key=" + publickey);
//获取连接对象
DruidPooledConnection connection = ds.getConnection();
System.out.println(connection);
}
}
dbutils:
是apache组织的一个工具类,jdbc的框架,更方便我们使用
使用步骤:
- 1.导入jar包(commons-dbutils-1.4.jar)
- 2.创建一个queryrunner类
queryrunner作用:操作sql语句
构造方法:
new QueryRunner(Datasource ds); - 3.编写sql
- 4.执行sql
query(…):执行r操作
update(…):执行cud操作
public class DBUtilsDemo {
public static void main(String[] args) throws SQLException {
//DBUtils 封装了操作对象,用来简化我们的操作
// DataSource 数据源接口,第三方的连接池,实现了这个接口
ComboPooledDataSource ds = new ComboPooledDataSource();
QueryRunner queryRunner = new QueryRunner(ds);
//增删改拿他来做
//String sql="insert into bank values(?,?)";
//int i = queryRunner.update(sql, "找六六", 1000);
//if(i>0){
// System.out.println("插入成功");
//}else{
// System.out.println("插入失败");
//}
//进行查询操作,并把我们查出的数据封装到集合里面去
String sql = "select * from bank";
List<Users> list = queryRunner.query(sql, new BeanListHandler<Users>(Users.class));
System.out.println(list);
ds.close();
}
}