目录

一、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.常用的配置参数

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中的数据

(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包

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

}

}

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

  1. aix oracle集群日志,在AIX环境下实施Oracle 集群RAC的结构 文平

    <oracle大型数据库系统在AIX/unix上的实战详解>集中讨论34:在AIX环境下实施Oracle 集群RAC的结构   文平 看来能用的起IBM p服务器的用户,都能用的起RAC. ...

  2. oracle 集群 配置,Oracle集群配置

    进入em 管理界面看看,现在可以看到已经可以在一个farm里面管理所有的instance了. 接下来设置一些 session复制的信息, 点击进入 iastest.finproduction.tpli ...

  3. oracle集群rac无法访问,解决Oracle 11g R2 RAC 无法在客户端通过scanIP连接数据库

    安装完11g rac后,在10g的客户端的 tnsnames.ora中配置好,scanip,但是无法访问,报错为目标主机不存在,折腾了很久,没弄明白,后面查到,系统初始化参数里有local_liste ...

  4. Oracle集群(RAC)及 jdbc 连接双机数据库

    2019独角兽企业重金招聘Python工程师标准>>> Oracle集群(RAC)及 jdbc 连接双机数据库 博客分类: java oracle集群url配置 oracle集群中p ...

  5. was连接oracle rac集群,Oracle集群(RAC)及 jdbc 联接双机数据库

    oracle集群url配置 oracle集群中plsql和java程序连接方式非集群中plsql连接配置: www.2cto.com DB1_193 = (DESCRIPTION = (ADDRESS ...

  6. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  7. linux下安装oracle集群,【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)...

    目录 数据库安装 继oracle集群安装之后,接下来也是最重要的数据库安装,整个数据库安装难度不大,用户以oracle用户身份登录RAC1主节点,对解压后的文件安装.主节点下安装后,其他所有结点自动安 ...

  8. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  9. Oracle集群(RAC)时间同步(ntp和CTSS)

    Oracle集群(RAC)时间同步(ntp和CTSS) http://blog.itpub.net/26736162/viewspace-2157130/ crsctl stat res -t -in ...

最新文章

  1. 为什么我强烈推荐你学习 Java ?(必看)
  2. python 类属性和对象属性--定义和作用域
  3. mysql ubb html_UBB中轻松实现歌词同步播放_html
  4. ubuntu16.04+anaconda3+python3.6安装OpenCV3.1.0
  5. mac怎么用终端编写c语言视频,【新手提问】有知道用mac终端编c语言的网络编程的人吗?...
  6. Android日志[进阶篇]五-阅读错误报告
  7. Nginx的平滑升级记录---适用于编译安装的Nginx
  8. C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
  9. 【英语学习】【Level 08】U02 Movie Time L2 In black and white
  10. PCIe规范的扩展:SR-IOV(Single Root I/O virtual)网卡直通技术
  11. C++之继承探究(五):子类对象作父类对象使用
  12. CUDA编程入门教程
  13. jQuery超酷轻量级响应式lightbox插件
  14. 在visual stdio中使用Git
  15. springboot1.5.x+ seata1.4.2(最新版本)+springcloud ( Edgware.SR5) +eureka+feign+mybatis-plus(最新)
  16. aws打开慢_亚马逊AWS服务器访问较慢,如何快速访问AWS服务器呢?
  17. 联想拯救者y7000p加内存条_内存、硬盘不够用?手把手教你升级联想拯救者 Y7000P...
  18. chroom浏览器网页二维码生成功能的方法
  19. AJAX---发送POST请求、Get请求、请求四步、解决低版本的缓存问题
  20. 从零开始学五线谱_初学者福利 | 学音乐,从五线谱开始

热门文章

  1. PBio-2018:如何设计可预测植物表型的微生物组
  2. php mysql or_mysql条件查询and or使用方法及优先级实例分析
  3. 不存在_MySQL数据存在就更新,不存在就添加
  4. R语言apropos函数查找包含特定字符的函数、find函数查找函数所在的位置实战
  5. R语言使用回归方法解决方差分析问题
  6. R假设检验之Grubbs异常检测(Grubbs’ Test)
  7. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?
  8. 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.
  9. Docker部署Jmeter 性能监控服务(常用命令)
  10. JAVA基础16-Java匿名内部类