JDBC数据库连接池的使用
JDBC数据库连接池的使用
一、基本概念和使用步骤
1.1、基本概念
概念:数据库连接池是一个存放数据库连接的容器,当系统初始化好后,容器被创建,容器中存储着一些数据库连接对象,当用户访问数据库
时,会从容器中获取一个数据库连接对象,当用户访问完后,释放连接,数据库连接对象会归还到容器中,而不是清除这个连接对象。
优点:节约资源,用户访问高效
JDBC依赖jar包:链接:https://pan.baidu.com/s/15E_faXtcKH7qW8pQhxGj8g 提取码:3hnb
1.2、使用步骤
导入jar包步骤:
将jar包放在项目下一个文件夹中,然后右键–>Add as Library
1、导入mysql的jar包
本文使用的mysql的jar为mysql-connector-java-5.1.37-bin.jar
2、导入数据库连接池jar包
如果使用的是C3P0数据库连接池,需要导入c3p0-0.9.5.2.jar和mchange-commons-java-0.2.12.jar
如果是使用druid数据库连接池,需要导入druid-1.0.9,jar
3、定义配置文件
如果使用C3P0数据库连接池,配置文件为c3p0-config.xml,注意该文件必须放在src文件夹下,并且只能使用该名称。
如果使用druid数据库连接池,配置文件为druid.properties,注意该文件可以使用任意名称和存放在任意位置,
但是一般存放在src文件夹下,并且使用druid命名。
4、创建数据库连接池对象
如果使用C3P0数据库连接池,则创建语句为:
DataSource DataSource对象名 = new ComboPooledDataSource();
如果使用druid数据库连接池,则创建语句为:
// 创建Properties对象
Properties Properties对象名 = new Properties();
// 创建druid配置文件的字节输入流对象
InputStream InputStream对象名 = 当前类名.class.getClassLoader().getResourceAsStream(druid配置文件路径);
// 导入配置文件
Properties对象名.load(InputStream对象名);
// 创建数据库连接池对象
DataSource DataSource对象名 = DruidDataSourceFactory.createDataSource(Properties对象名);
5、创建数据库连接对象
创建数据库连接对象语句:
// 创建数据库连接对象
Connection Connection对象名 = DataSource对象名.getConnection();
6、创建字符串类型的sql语句
7、创建Statement对象或者PreparedStatement对象
创建Statement对象语句:
// 创建Statement对象
Statement Statement对象名 = Connection对象名.createStatement();
创建PreparedStatement对象语句
// 创建PreparedStatement对象
PreparedStream PreparedStatement对象名 = Connection对象名.preparedStatement(sql语句)
8、执行sql语句
如果是Statement对象,则执行方法为:
// 执行增、删、改操作
Statement对象名.executeUpdate(sql语句);
// 执行查询操作
ResultSet ResultSet对象名 = Statement对象名.executeQuery(sql语句);
如果是PreparedStatement对象,则执行方法为:
// 调用setXxx方法将指定占位符(即?)处的内容补齐
PreparedStatement对象名.setXxx(int 占位符位置, Xxx 填充数据)
// 执行增、删、改操作
PreparedStatement对象名.executeUpdate();
// 执行查询操作
ResultSet ResultSet对象名 = PreparedStatement对象名.executeQuery();
9、执行释放资源操作
根据实际情况调用ResultSet对象、Statement、PreparedStatement对象、Connection对象的close方法释放资源。
二、C3P0数据库连接池
2.1、概念
C3P0数据库连接池是一种数据库连接池技术,里面包含大量对于数据库连接池的操作。
2.2、使用步骤
2.2.1、导入mysql的jar包
本文使用的mysql的jar为mysql-connector-java-5.1.37-bin.jar
2.2.2、导入C3P0的jar包
本文导入的是c3p0-0.9.5.2.jar和mchange-commons-java-0.2.12.jar
2.2.3、创建C3P0的配置文件
C3P0的配置文件必须以c3p0.properties 或者 c3p0-config.xml命名,并且需要放在src目录下,否则会报错。
C3P0配置文件内容,以xml文件为例:
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/db3 root root 5 10 3000 com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/db2 root root 5 8 1000
2.2.4、创建数据库连接池对象
创建格式:DataSource DataSource对象名 = new ComboPooledDataSource();
创建示例:DataSource c3p0_ds = new ComboPooledDataSource();
2.2.5、创建Connection对象
创建格式:Connection Connection对象名 = DataSource对象名.getConnection();
创建示例:Connection c3p0_conn = c3p0_ds.getConnection();
2.2.6、创建需要执行的sql语句
2.2.7、创建Statement对象或者PreparedStatement对象
创建Statement对象格式:Statement Statement对象名 = Connection对象名.createStatement();
创建Statement对象示例:Statement c3p0_stat = c3p0_conn.createStatement();
创建PreparedStatement对象格式:PreparedStream PreparedStatement对象名 = Connection对象名.preparedStatement(sql语句)
创建PreparedStatement对象格式:PreparedStream c3p0_prep = c3p0_conn.preparedStatement(sql)
2.2.8、执行sql语句
如果是Statement对象,则执行方法为:
// 执行增、删、改操作
Statement对象名.executeUpdate(sql语句);
// 执行查询操作
ResultSet ResultSet对象名 = Statement对象名.executeQuery(sql语句);
如果是PreparedStatement对象,则执行方法为:
// 调用setXxx方法将指定占位符(即?)处的内容补齐
PreparedStatement对象名.setXxx(int 占位符位置, Xxx 填充数据)
// 执行增、删、改操作
PreparedStatement对象名.executeUpdate();
// 执行查询操作
ResultSet ResultSet对象名 = PreparedStatement对象名.executeQuery();
2.2.9、释放资源
根据实际情况调用ResultSet对象、Statement、PreparedStatement对象、Connection对象的close方法释放资源。
C3P0数据库连接池使用示例:
package jdbcconnectionpool.c3p0;import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;/*** 功能:练习C3P0数据库连接池的使用*/
public class C3P0Demo01 {public static void main(String[] args) {// 1、创建数据库连接池对象DataSource ds = new ComboPooledDataSource();Connection conn = null;Statement stat = null;try {// 2、获取数据库连接对象conn = ds.getConnection();// 获取Statement对象stat = conn.createStatement();// 创建一条sql语句String insert_sql = "insert into dept values (50, '法律部', '上海')";// 执行sql语句int count = stat.executeUpdate(insert_sql);// 输出执行结果System.out.println(count);} catch (SQLException e) {e.printStackTrace();}finally {// 释放资源if (stat != null){try {stat.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}
三、druid数据库连接池
3.1、概念
druid数据库连接池是一种数据库连接池技术,里面包含大量对于数据库连接池的操作。
3.2、使用方法
3.2.1、导入mysql的jar包
本文使用的mysql的jar为mysql-connector-java-5.1.37-bin.jar
3.2.2、导入druid的jar包
本文导入的是druid-1.0.9.jar
3.2.3、创建druid的配置文件
druid的配置文件配置文件为druid.properties,注意该文件可以使用任意名称和存放在任意位置,但是一般存放在src文件夹下,并且使用druid命名。
druid的配置文件内容:
// 数据库驱动driverClassName=com.mysql.jdbc.Driver// 数据库连接url(根据自己实际情况填写)url=jdbc:mysql://127.0.0.1:3306/db3// 数据库登录用户名(根据自己实际情况填写)username=root// 数据库登录密码(根据自己实际情况填写)password=root// 数据库连接池初始化连接数量(根据自己实际情况填写)initialSize=5// 数据库连接池允许的最大连接数量(根据自己实际情况填写)maxActive=10// 数据库连接运行的最大未响应时间(根据自己实际情况填写)maxWait=3000
3.2.4、创建数据库连接池对象
创建格式:
// 创建Properties对象
Properties Properties对象名 = new Properties();
// 创建druid配置文件的字节输入流对象
InputStream InputStream对象名 = 当前类名.class.getClassLoader().getResourceAsStream(druid配置文件路径);
// 导入配置文件
Properties对象名.load(InputStream对象名);
// 创建数据库连接池对象
DataSource DataSource对象名 = DruidDataSourceFactory.createDataSource(Properties对象名);
创建示例:
// 加载配置文件
Properties druid_pro = new Properties();
InputStream druid_is = DruidDemo01.class.getClassLoader().getResourceAsStream(“druid.properties”);
druid_pro.load(druid_is);
// 创建数据库连接池对象
DataSource druid_ds = DruidDataSourceFactory.createDataSource(druid_pro);
3.2.5、创建Connection对象
创建格式:Connection Connection对象名 = DataSource对象名.getConnection();
创建示例:Connection c3p0_conn = c3p0_ds.getConnection();
3.2.6、创建需要执行的sql语句
3.2.7、创建Statement对象或者PreparedStatement对象
创建Statement对象格式:Statement Statement对象名 = Connection对象名.createStatement();
创建Statement对象示例:Statement c3p0_stat = c3p0_conn.createStatement();
创建PreparedStatement对象格式:PreparedStream PreparedStatement对象名 = Connection对象名.preparedStatement(sql语句)
创建PreparedStatement对象格式:PreparedStream c3p0_prep = c3p0_conn.preparedStatement(sql)
3.2.8、执行sql语句
如果是Statement对象,则执行方法为:
// 执行增、删、改操作
Statement对象名.executeUpdate(sql语句);
// 执行查询操作
ResultSet ResultSet对象名 = Statement对象名.executeQuery(sql语句);
如果是PreparedStatement对象,则执行方法为:
// 调用setXxx方法将指定占位符(即?)处的内容补齐
PreparedStatement对象名.setXxx(int 占位符位置, Xxx 填充数据)
// 执行增、删、改操作
PreparedStatement对象名.executeUpdate();
// 执行查询操作
ResultSet ResultSet对象名 = PreparedStatement对象名.executeQuery();
3.2.9、释放资源
根据实际情况调用ResultSet对象、Statement、PreparedStatement对象、Connection对象的close方法释放资源。
druid数据库连接池使用示例:
package jdbcconnectionpool.druid;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Properties;/*** 功能:druid数据库连接池的基本使用*/
public class DruidDemo01 {public static void main(String[] args) throws Exception {// 1、加载配置文件Properties druid_pro = new Properties();InputStream druid_is = DruidDemo01.class.getClassLoader().getResourceAsStream("druid.properties");druid_pro.load(druid_is);// 创建数据库连接池对象DataSource druid_ds = DruidDataSourceFactory.createDataSource(druid_pro);// 获取Connection对象Connection druid_conn = druid_ds.getConnection();// 获取Statement对象Statement druid_stat = druid_conn.createStatement();// 定义sql语句String update_sql = "update dept set loc = '北京' where id = 50";// 执行sql语句int count = druid_stat.executeUpdate(update_sql);// 输出处理结果System.out.println("count = " + count);// 释放资源druid_stat.close();druid_conn.close();}
}
四、JdbcTemplate
4.1、概念
JdbcTemplate是Spring提供的一个关于JDBC的简易封装,用于简化JDBC的开发。
4.2、使用步骤
4.2.1、导入mysql的jar包
本文使用的mysql的jar为mysql-connector-java-5.1.37-bin.jar
4.2.2、导入数据库连接池jar包
如果使用的是C3P0数据库连接池,需要导入c3p0-0.9.5.2.jar和mchange-commons-java-0.2.12.jar
如果是使用druid数据库连接池,需要导入druid-1.0.9,jar
4.2.3、导入JdbcTemplate需要的包
本文使用的JdbcTemplate包为:commons-logging-1.2.jar、spring-beans-5.0.0.RELEASE.jar、spring-core-5.0.0.RELEASE.jar、
spring-jdbc-5.0.0.RELEASE.jar、spring-tx-5.0.0.RELEASE.jar。
4.2.4、创建DataSource对象
如果使用C3P0数据库连接池,则创建语句为:
DataSource DataSource对象名 = new ComboPooledDataSource();
如果使用druid数据库连接池,则创建语句为:
// 创建Properties对象
Properties Properties对象名 = new Properties();
// 创建druid配置文件的字节输入流对象
InputStream InputStream对象名 = 当前类名.class.getClassLoader().getResourceAsStream(druid配置文件路径);
// 导入配置文件
Properties对象名.load(InputStream对象名);
// 创建数据库连接池对象
DataSource DataSource对象名 = DruidDataSourceFactory.createDataSource(Properties对象名);
4.2.5、创建JdbcTemplate对象
创建格式:JdbcTemplate 对象名 = new JdbcTemplate(DataSource对象名);
创建示例:JdbcTemplate jt = new JdbcTemplate(ds);
4.2.6、定义sql语句
sql语句示例:
// 查询所有数据并返回
String select_sql = “select * from dept”;
4.2.7、调用对应的方法执行sql语句
方法示例:
// 查询所有数据并将返回的结果封装到由dept对象组成的List集合中
List select_dept = jt.query(select_sql, new BeanPropertyRowMapper(Dept.class));
4.2.8、对返回的结果进行操作
操作示例:
// 输出List集合中的元素
for (Dept d: select_dept){
System.out.println(d.toString());
}
4.3、常用方法
4.3.1、创建JdbcTemplate对象
创建格式:JdbcTemplate 对象名 = new JdbcTemplate(DataSource对象名);
创建示例:JdbcTemplate jt = new JdbcTemplate(ds);
4.3.2、update()
功能:update():执行DML语句。增、删、改语句。
使用格式:int count = JdbcTemplate.update(String sql, args a);
参数:
String sql:需要执行的DML语句,即增、删、改语句。
args a:占位符数据,即?处填充的数据,有几个?写几个数据。
返回值:
int count:数据库中受影响的数据行数。
使用示例:
// 定义Sql语句
String update_sql = “update dept set loc=? where id=?”;
// 执行sql语句
int count = jt.update(update_sql, loc, id);
4.3.3、queryForMap()
功能:查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合。
使用格式:Map
参数:
String sql:需要执行的DQL语句,即查询语句。
args a:占位符数据,即?处填充的数据,有几个?写几个数据。
返回值:
Map
使用示例:
// 定义Sql语句
String select_sql = “select * from dept where id = ?”;
// 执行sql语句
Map
注意:这个方法查询的结果集长度只能是1,用于查询结果为1行多列的情况。
4.3.4、queryForList()
功能:查询结果将结果集封装为list集合。
使用格式:List
package jdbcconnectionpool.jdbctemplate;import org.springframework.jdbc.core.JdbcTemplate;
import util.DruidUtils;/*** 功能:练习JDBCTemplate的使用*/
public class JDBCTemplateDemo01 {public static void main(String[] args) {// 1、加载配置文件Properties druid_pro = new Properties();InputStream druid_is = DruidDemo01.class.getClassLoader().getResourceAsStream("druid.properties");druid_pro.load(druid_is);// 创建数据库连接池对象DataSource druid_ds = DruidDataSourceFactory.createDataSource(druid_pro);// 创建JDBCTemplate对象JdbcTemplate jt = new JdbcTemplate(druid_ds);// 定义需要执行的sql语句String update_sql = "update dept set loc = '北京' where id = ?";// 执行sql语句int count = jt.update(update_sql, 40);// 输出sql语句执行结果System.out.println(count);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
