html标签生成的快捷键

Linux 命令之 aptitude -- APT 软件包管理工具

  返回  

jdbc连接池和jdbcTemplate

2021/7/21 12:10:37 浏览:

一. jdbc连接池

  • 程序和数据库之间的连接是底层技术,每一次连接都比较耗时,而用完后又得关闭连接释放资源,这样反复连接和释放其实是很浪费时间的,因此引出一个连接池技术,来管理这些连接对象。连接对象被使用完后,会归还给连接池,等待分配给下一次使用,而不是销毁。

1.就是一个容器
2.容器中装的是connection连接对象
3.这些连接对象创建后可以反复被使用,并不会销毁
4.它们是共享的

1. 常用的连接池

c3p0 hibernate 传统的orm框架
druid 国产的 阿里

2. 连接池的方法

1. ds.getConnection();  获取连接对象 -- 传统的方式 DriverManager.getConnection();
2. con.close();  表示归还连接对象给连接池(前提:con是从连接池获取的)

3. C3p0连接池的使用

  • 准备工作
  • 导jar包 – 两个连接池 一个数据库驱动 共3个
  • 配置文件简介

1.导入两个c3p0的jar包+mysql驱动jar包,共3个
2.c3p0-config.xml 错误的写法:c3po-config.xml c3p0config.xml c3p0_config.xml
*文件必须正确的命名
*路径必须在src直接目录下,不能在其子目录

基本使用

<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
    <!--默认配置-->
    <default-config>
    <!--连接参数-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db1</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!--连接池参数-->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">3000</property>
    </default-config>
    <!--自定义配置-->
    <name-config name="myc3p0">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db1</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!--连接池参数-->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">3000</property>
    </name-config>
</c3p0-config>

- 注意事项:

  1. c3p0-config.xml 文件名必须这么命名
  2. c3p0-config.xml 文件必须放在src目录下,不能放在子目录

1.maxPoolSize 最大连接对象的个数

2.checkoutTimeout 最大的报错时间

3.named-config 指定名称配置
*如果 new CombopooledDataSource(“abc”)

  • 可能会出错的地方

    • 配置文件中书写错误
    • 文件名或路径错误
    • 数据库连接四大参数书写错误,或多加空格
    • 忘记导入驱动jar包
@Test        //测试连接池参数
    public void test2() throws SQLException {
        //创建连接池数据源对象
        ComboPooledDataSource ds = new ComboPooledDataSource();
        //获得链接对象
        Connection con = ds.getConnection();
        //输出链接对象的地址值表示连接正常
        System.out.println(con);
    }

4. druid连接池

4.1 基本使用
  • 导入jar包-- 1个

  • 定义配置文件 druid.properties

  • 代码演示

public class Test2 {
    @Test            //不用配置文件
    public void test1() throws SQLException {
        //创建连接池对象
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/db1");
        ds.setUsername("root");
        ds.setPassword("123456");
        //从连接池中获取对象
        System.out.println(ds.getConnection());
    }

    @Test            //用配置文件
    public void test2() throws Exception {
        Properties p = new Properties();
        p.load(new FileInputStream("src/druid.properties"));
        DataSource ds = DruidDataSourceFactory.createDataSource(p);
        System.out.println(ds.getConnection());
    }
}
4.2 工具类
public class JdbcUtil {
    private static DataSource ds;
    /**
     * 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
     */
    static{
        //读取资源文件,获取值。
        try {
            FileInputStream is = new FileInputStream("E:\\Javaweb\\day06-web\\src\\druid.properties");
            Properties p = new Properties();
            p.load(is);
            //创建数据源  给成员属性 ds赋值
            ds = DruidDataSourceFactory.createDataSource(p);
            //System.out.println(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println(getDs());
    }

    /**
     * 获取连接
     * @return 连接对象
     */
    public static Connection getConnection() {

        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //获取连接池对象  ds
    public static DataSource getDs(){
        return ds;
    }

    /**
     * 释放资源
     * @param stmt
     * @param conn
     */
    public static void close(ResultSet rs, Statement stmt, Connection conn){
        if( rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
4.3 工具类测试
@Test      //修改的金额为5000
    public void test8(){
        //创建jdbcTemplate对象
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        //定义sql
        int update = template.update("update account set balance=5000 where id=?",1);
        System.out.println(update);
    }

二.jdbcTemplate

1. 简介

  • Spring框架对jdbc的简单封装,提供了一个JdbcTemplate对象
  • jdbcTemplate的若干方法
    • update 执行 dml增删改
    • queryForMap() 查询结果,将结果集封装为map集合
    • queryForList() 查询结果,将结果集封装为list集合
    • queryForObject() 查询结果集,将结果集封装成某个数据类型
    • query() 查询结果集,将结果集封装为Javabean对象

1.导包 spring的5个jar包 + mysql的驱动 + druid连接池包1个= 7个
2.使用jdbcTemplate对象,该对象的创建需要连接池对象ds

JdbcTemplate jdbcTemplate=new JdbcTemplate(DruidUtil.getDataSource());
jdbcTemplate.update();//dml
jdbcTemplate.query();
jdbcTemplate.queryForMap();
jdbcTemplate.queryForList();
jdbcTemplate.queryForObject();

2.入门

@Test      //修改的金额为5000
   public void test8(){
       //创建jdbcTemplate对象
       JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
       //定义sql
       int update = template.update("update account set balance=5000 where id=?",1);
       System.out.println(update);
   }

3. jdbcTemplate综合练习

public class TestJdbcTemplate {

    @Test      //修改的金额为5000
    public void test8(){
        //创建jdbcTemplate对象
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        //定义sql
        int update = template.update("update account set balance=5000 where id=?",1);
        System.out.println(update);
    }
    @Test
    public void update(){
        //创建简化操作模板
        JdbcTemplate template = new JdbcTemplate(JdbcUtil.getDs());
        //调用update
        int i = template.update("update dept set name=? where id=?", "教学部", 5);
        System.out.println(i);//受影响的行数 i
    }
    @Test    //查询所有,封装成List中泛型为Map
    public void test2(){
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        List<Map<String, Object>> list = template.queryForList("select * from emp");
        System.out.println(list);
    }
    @Test      //新增
    public void test3(){
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        int c = template.update("insert users values (null,?,?)", "曹操", "123123");
        System.out.println(c);
    }
    @Test      //修改
    public void test4(){
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        int d = template.update("update users set NAME=? where id=?", "貂蝉", 3);
        System.out.println(d);
    }
    @Test      //删除
    public void test5(){
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        int d = template.update("delete from users where id=?",  3);
        System.out.println(d);
    }
    @Test      //查询一条 封装map
    public void test6(){
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        Map<String, Object> map = template.queryForMap("select * from users where id=?", 2);
        System.out.println(map);
    }
    @Test      //查询一条 封装javaBean
    public void test7(){
        JdbcTemplate template = new JdbcTemplate(com.JdbcUtil.getDs());
        Users users = template.queryForObject("select * from users where id=?", new BeanPropertyRowMapper<Users>(Users.class), 1);
        System.out.println(users);
    }
}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号