失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > JDBC数据库连接池的使用

JDBC数据库连接池的使用

时间:2024-07-17 13:15:09

相关推荐

JDBC数据库连接池的使用

JDBC数据库连接池的使用

一、基本概念和使用步骤

1.1、基本概念

概念:数据库连接池是一个存放数据库连接的容器,当系统初始化好后,容器被创建,容器中存储着一些数据库连接对象,当用户访问数据库

时,会从容器中获取一个数据库连接对象,当用户访问完后,释放连接,数据库连接对象会归还到容器中,而不是清除这个连接对象。

优点:节约资源,用户访问高效

JDBC依赖jar包:链接:/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文件为例:

<c3p0-config><!-- 使用默认的配置读取连接池对象 --><default-config><!-- 连接参数 --><!-- 驱动 --><property name="driverClass">com.mysql.jdbc.Driver</property><!-- 数据库连接url(根据自己实际情况进行配置) --><property name="jdbcUrl">jdbc:mysql://localhost:3306/db3</property><!-- 数据库登录用户名(根据自己实际情况填写) --><property name="user">root</property><!-- 数据库登录密码(根据自己实际情况填写) --><property name="password">root</property><!-- 连接池参数 --><! -- 初始化数据库连接数量(根据自己实际情况填写) --><property name="initialPoolSize">5</property><!-- 最大允许同时存在的数据库连接数量(根据自己实际情况填写) --><property name="maxPoolSize">10</property><!-- 运行数据库响应超时时间(根据自己实际情况填写) --><property name="checkoutTimeout">3000</property></default-config><!-- 使用参数连接的数据库,配置方法同上 --><named-config name="otherc3p0"><!-- 连接参数 --><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/db2</property><property name="user">root</property><property name="password">root</property><!-- 连接池参数 --><property name="initialPoolSize">5</property><property name="maxPoolSize">8</property><property name="checkoutTimeout">1000</property></named-config></c3p0-config>

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.boPooledDataSource;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, Object> 变量名 = JdbcTemplate对象名.queryForMap(String sql, args a)

参数:

String sql:需要执行的DQL语句,即查询语句。

args a:占位符数据,即?处填充的数据,有几个?写几个数据。

返回值:

Map<String, Object> 变量名:查询结果。

使用示例:

// 定义Sql语句

String select_sql = “select * from dept where id = ?”;

// 执行sql语句

Map<String, Object> select_map = jt.queryForMap(select_sql, id);

注意:这个方法查询的结果集长度只能是1,用于查询结果为1行多列的情况。

4.3.4、queryForList()

功能:查询结果将结果集封装为list集合。

使用格式:List<Map<String, Object>> 变量名 = JdbcTemplate对象名.queryForList(String sql, args a)

参数:

String sql:需要执行的DQL语句,即查询语句。

args a:占位符数据,即?处填充的数据,有几个?写几个数据。

返回值:

List<Map<String, Object>> 变量名:查询结果。

使用示例:

// 定义Sql语句

String select_sql = “select * from dept”;

// 执行sql语句

List<Map<String, Object>> select_list = jt.queryForList(select_sql);

注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中,用于查询结果为多行一列或者多行多列的情况。

4.3.5、query()

功能:查询结果,将结果封装为由JavaBean对象组成的List集合,JavaBean对象值自己定义的类对象,属性为返回结果的列名。

使用格式:List<类名> 变量名 = JdbcTemplate对象名.query(String sql, new BeanPropertyRowMapper<类名>(类名.class))

参数:

String sql:需要执行的DQL语句,即查询语句。

new BeanPropertyRowMapper<类名>(类名.class):RowMapper接口的实现类,用于确定一行数据填充格式。

返回值:

List<类名> 变量名:查询结果,为以类对象为数据的List集合。

使用示例:

// 定义Sql语句

String select_sql = “select * from dept”;

// 执行sql语句

List select_dept = jt.query(select_sql, new BeanPropertyRowMapper(Dept.class));

注意:

new BeanPropertyRowMapper<类名>(类名.class)可以替换为RowMapper接口,然后自己实现一行数据填充格式。

query多用于查询多行多列或者多行一列的数据。

4.3.6、queryForObject()

功能:查询结果,将结果封装为对象

使用格式:数据类型 变量名 = JdbcTemplate对象名.queryForObject(String sql, 数据类型封装类.class)

参数:

String sql:需要执行的DQL语句,即查询语句。

数据类型封装类.class:查询结果的数据类型的封装类的class文件。

数据类型 变量名:查询结果,数据类型与查询结果数据类型相同。

使用示例:

// 定义Sql语句

String select_sql = “select count(id) from dept”;

// 执行sql语句

long count = jt.queryForObject(select_sql, Long.class);

注意:queryForObject方法一般用于聚合函数的查询,并且查询结果为但个数据的值,即一行一列的数据。

JdbcTemplate使用示例:

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);}}

如果觉得《JDBC数据库连接池的使用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。