c3p0和jdbctemplate配置oracle集群rac,C3P0连接池、DRUID连接池和JdbcTemplate

目录

一、C3P0连接池

1.C3P0连接池简介

2.常用的配置参数

3.C3P0连接池基本使用

(1)C3P0配置文件

(2)API介绍

4.使用步骤

二、DRUID连接池

1. DRUID简介

2.DRUID连接池基本使用

(1)API介绍

(2)使用步骤

(3)配置文件

(4)DataSourceUtils工具类

三、JdbcTemplate

1. JdbcTemplate概念

2. JdbcTemplate使用过程

3.JdbcTemplate实现增删改

(1)创建表

(2)插入数据

(3)更改数据

(4)删除数据

4.JdbcTemplate实现查询

(1)queryForObject查询数据返回整数

(2)queryForObject查询数据返回String

(3)queryForMap查询数据返回Map集合

(4)queryForList查询数据返回List集合

(5)query使用RowMapper做映射返回对象

(6)query使用BeanPropertyRowMapper做映射返回对象

一、C3P0连接池

1.C3P0连接池简介

C3P0地址:https://sourceforge.net/projects/c3p0/?source=navbar C3P0是一个开源的连接池。Hibernate框架,默认推荐使用C3P0作为连接池实现。 C3P0的jar包: c3p0-0.9.1.2.jar

2.常用的配置参数

cb5fee917c8b712de61b245cafbd3a21.png

3.C3P0连接池基本使用

(1)C3P0配置文件

jdbc:mysql://localhost:3306/mydb1

com.mysql.jdbc.Driver

root

123

3

10

2

10

jdbc:mysql://localhost:3306/mydb1

com.mysql.jdbc.Driver

root

123

3

10

2

10

(2)API介绍

com.mchange.v2.c3p0.ComboPooledDataSource类表示C3P0的连接池对象,常用2种创建连接池的方式: 1.无参构造,使用默认配置, 2.有参构造,使用命名配置

public ComboPooledDataSource():无参构造使用默认配置

public ComboPooledDataSource():有参构造使用命名配置

public Connection getConnection() throws SQLException:从连接池中取出一个连接

4.使用步骤

1. 导入jar包c3p0-0.9.1.2.jar

2. 编写c3p0-config.xml 配置文件,配置对应参数

3. 将配置文件放在src目录下

4. 创建连接池对象ComboPooledDataSource ,使用默认配置或命名配置

5. 从连接池中获取连接对象

6. 使用连接对象操作数据库

7. 关闭资源

二、DRUID连接池

1. DRUID简介

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid地址:

https://github.com/alibaba/druid DRUID

连接池使用的jar包: druid-1.0.9.jar

2.DRUID连接池基本使用

(1)API介绍

com.alibaba.druid.pool.DruidDataSourceFactory 类有创建连接池的方法

public static DataSource createDataSource(Properties properties):创建一个连接池,连接池的参数使用properties中的数据

0d69a90f877c8bb5e9314ccc0b3b9a03.png

(2)使用步骤

1. 在src目录下创建一个properties文件,并设置对应参数

2. 加载properties文件的内容到Properties对象中

3. 创建DRUID连接池,使用配置文件中的参数

4. 从DRUID连接池中取出连接

5. 执行SQL语句

6. 关闭资源

(3)配置文件

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/day25

username=root

password=root

initialSize=5

maxActive=10

maxWait=3000

minIdle=3

(4)DataSourceUtils工具类

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.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

public class DataSourceUtils {

// 1. 声明静态数据源成员变量

private static DataSource ds;

// 2. 创建连接池对象

static {

// 加载配置文件中的数据

InputStream is =

DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties");

Properties pp = new Properties();

try {

pp.load(is);

// 创建连接池,使用配置文件中的参数

ds = DruidDataSourceFactory.createDataSource(pp);

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

// 3. 定义公有的得到数据源的方法

public static DataSource getDataSource() {

return ds;

}

// 4. 定义得到连接对象的方法

public static Connection getConnection() throws SQLException {

return ds.getConnection();

}

// 5.定义关闭资源的方法

public static void close(Connection conn, Statement stmt, ResultSet rs) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

}

}

if (stmt != null) {

try {

stmt.close();

} catch (SQLException e) {

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

}

}

}

// 6.重载关闭方法

public static void close(Connection conn, Statement stmt) {

close(conn, stmt, null);

}

}

三、JdbcTemplate

1. JdbcTemplate概念

JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。JdbcTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

Spring源码地址:https://github.com/spring-projects/spring-framework

在JdbcTemplate中执行SQL语句的方法大致分为3类:

1.execute :可以执行所有SQL语句,一般用于执行DDL语句。

2. update :用于执行INSERT 、UPDATE 、DELETE 等DML语句。

3.queryXxx :用于DQL数据查询语句。

2. JdbcTemplate使用过程

(1)准备DruidDataSource连接池或C3P0连接池

(2)导入依赖的jar包

6bab37f3e434e602dfa2868e937b7d21.png

(3)创建JdbcTemplate对象,传入连接池对象

(4)调用execute、update、queryXxx等方法

3.JdbcTemplate实现增删改

(1)创建表

public static void main(String[] args) {

String sql = "CREATE TABLE product("

+ "pid INT PRIMARY KEY AUTO_INCREMENT,"

+ "pname VARCHAR(20),"

+ "price DOUBLE"

+ ");";

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

jdbcTemplate.execute(sql);

}

(2)插入数据

public static void main(String[] args) {

String sql = "INSERT INTO product VALUES (NULL, ?, ?);";

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

jdbcTemplate.update(sql, "iPhone3GS", 3333);

jdbcTemplate.update(sql, "iPhone4", 5000);

jdbcTemplate.update(sql, "iPhone4S", 5001);

jdbcTemplate.update(sql, "iPhone5", 5555);

jdbcTemplate.update(sql, "iPhone5C", 3888);

jdbcTemplate.update(sql, "iPhone5S", 5666);

jdbcTemplate.update(sql, "iPhone6", 6666);

jdbcTemplate.update(sql, "iPhone6S", 7000);

jdbcTemplate.update(sql, "iPhone6SP", 7777);

jdbcTemplate.update(sql, "iPhoneX", 8888);

}

(3)更改数据

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "UPDATE product SET pname=?, price=? WHERE pid=?;";

// String sql = "update pruduct set pname=?,price=? where pid=?;";

int i = jdbcTemplate.update(sql, "小米5s", 1999, 10);

System.out.println(i);

}

(4)删除数据

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "DELETE FROM product WHERE pid=?;";

int i = jdbcTemplate.update(sql, 7);

System.out.println(i);

}

4.JdbcTemplate实现查询

(1)queryForObject查询数据返回整数

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "SELECT price FROM product where pid=3;";

Integer integer = jdbcTemplate.queryForObject(sql, int.class);

System.out.println(integer);

}

(2)queryForObject查询数据返回String

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "SELECT pname FROM product where pid=1;";

String s = jdbcTemplate.queryForObject(sql, String.class);

System.out.println(s);

}

(3)queryForMap查询数据返回Map集合

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "SELECT * FROM product where pid=?";

Map forMap = jdbcTemplate.queryForMap(sql,6);

Set> entries = forMap.entrySet();

for (Map.Entry entry : entries) {

System.out.println(entry.getKey() + "---" + entry.getValue());

}

}

(4)queryForList查询数据返回List集合

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "SELECT * FROM product";

List> mapList = jdbcTemplate.queryForList(sql);

for (Map objectMap : mapList) {

Set> entries = objectMap.entrySet();

for (Map.Entry entry : entries) {

System.out.print(entry.getKey() + "---" + entry.getValue());

}

System.out.println();

}

}

(5)query使用RowMapper做映射返回对象

public class Product {

private int pid;

private String pname;

private double price;

@Override

public String toString() {

return "Pruduct{" +

"pid=" + pid +

", pname='" + pname + '\'' +

", price=" + price +

'}';

}

public Product() {

}

public Product(int pid, String pname, double price) {

this.pid = pid;

this.pname = pname;

this.price = price;

}

public int getPid() {

return pid;

}

public void setPid(int pid) {

this.pid = pid;

}

public String getPname() {

return pname;

}

public void setPname(String pname) {

this.pname = pname;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

}

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "select * from product";

List products = jdbcTemplate.query(sql, (resultSet, i) -> {

Product p = new Product();

p.setPid(resultSet.getInt("pid"));

p.setPname(resultSet.getString("pname"));

p.setPrice(resultSet.getDouble("price"));

return p;

});

for (Product product : products) {

System.out.println(product);

}

}

(6)query使用BeanPropertyRowMapper做映射返回对象

public static void main(String[] args) {

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

String sql = "select * from product";

List products = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Product.class));

for (Product product : products) {

System.out.println(product);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值