zoukankan      html  css  js  c++  java
  • JDBCTemplate、Druid连接池

    一、JDBC

           1.概念:Java DataBase Connectivity  Java 数据库连接, Java语言操作数据库

              * JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

           2.快速入门         

    //1. 导入驱动jar包
            //2.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //3.获取数据库连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
            //4.定义sql语句  
            String sql = "update account set balance = ? where id = ?";
            //5.获取执行sql的对象 Statement
          PreparedStatement pst =con.prepareStatement(sql);
           pst.setDouble(1, 500);
        pst.setDouble(2, 1000);
            //6.执行sql
            int count = stmt.executeUpdate(sql);
            //7.处理结果
            System.out.println(count);
            //8.释放资源
            stmt.close();
            conn.close();

             3.详解各个对象:

                3.1. DriverManager:驱动管理对象

                     功能:

                               1.注册驱动:告诉程序该使用哪一个数据库驱动jar

                                2.获取数据库连接;

                 3.2. Connection:数据库连接对象

                     功能:1. 获取执行sql 的对象

                                    * Statement createStatement()

                                   * PreparedStatement prepareStatement(String sql)

                                2.管理事务

                                     * 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务

                                             * 在执行sql之前开启事务

                                    * 提交事务:commit() 

                                               * 当所有sql都执行完提交事务

               * 回滚事务:rollback()

                                               * 在catch中回滚事务

    二、数据库连接池

           1.概念:是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

           2. 好处: 节约资源、用户访问高效

           3.实现: 标准接口:DataSource   javax.sql包下的;

                      方法: 获取连接:getConnection();

            4.连接池技术

               4.1.c3p0: 数据库连接技术

                  步骤:

                     1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
                         * 不要忘记导入数据库驱动jar包
                     2. 定义配置文件:
                          * 名称: c3p0.properties 或者 c3p0-config.xml
                         * 路径:直接将文件放在src目录下即可。

                     3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
                     4. 获取连接: getConnection         

    public class C3_P0utils {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource("oracle");
     
     public static DataSource getDataSource() {
         return dataSource;
     }
     
     public static Connection getConnection() {
         try {
             
             return dataSource.getConnection();
             
        } catch (SQLException e) {
            throw new RuntimeException();
        }
     } 
    }
    <!--c3p0-config配置文件-->

    <?
    xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///mbase</property> <property name="user">root</property> <property name="password">123</property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">20</property> </default-config> </c3p0-config>
    
    
    
     

                4.2.Druid:数据库连接技术,阿里巴巴提供

                   步骤:

                       1. 导入jar包 druid-1.0.9.jar

                       2. 定义配置文件:
                          * 是properties形式的
                          * 可以叫任意名称,可以放在任意目录下
                       3. 加载配置文件。Properties
                      4. 获取数据库连接池对象:通过工厂来来获取 DruidDataSourceFactory
                      5. 获取连接:getConnection

    public class JDBCUtils {
    
                //1.定义成员变量 DataSource
                private static DataSource ds ;
            
                static{
                    try {
                        //1.加载配置文件
                        Properties pro = new Properties();
                        pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
                        //2.获取DataSource
                        ds = DruidDataSourceFactory.createDataSource(pro);
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            
                /**
                 * 获取连接
                 */
                public static Connection getConnection() throws SQLException {
                    return ds.getConnection();
                }
            
                /**
                 * 释放资源
                 */
                public static void close(Statement stmt,Connection conn){
                   /* if(stmt != null){
                        try {
                            stmt.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
            
                    if(conn != null){
                        try {
                            conn.close();//归还连接
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }*/
            
                   close(null,stmt,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();
                        }
                    }
                }
            
                /**
                 * 获取连接池方法
                 */
            
                public static DataSource getDataSource(){
                    return  ds;
                }
            
            }
    //druid.properties文件
    driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mbase username=root password=123
    
    
    
     

    三、DButils

      例:    

    //1.创建按核心类QueryRunner
            QueryRunner qr = new QueryRunner(C3_P0utils.getDataSource());
    
    //增加
    String sql="insert into sort values(null,?,?,?)";
            //3.为占位符设置值
            Object[] params = {"超萌二哈",190,"拆家拆家"};
            //4.执行添加操作
            int row=qr.update(sql, params);
    
    //修改
    
    String sql="update sort set sname=? where id=?";
            Object[] param= {"二哈",19};
            int row =qr.update(sql,param);
    
    //删除
    String sql ="delete from sort where id=?";
            int row = qr.update(sql,20);
    //查询
      //1.将结果集的每一行数据封装成JavaBean对象 : BeanListHandler
    List<Users> users=qr.query(sql, new BeanListHandler<Users>(Users.class));
      //2.将结果集的一行数据封装成JavaBean对象:BeanHandler
     Users users=qr.query(sql,new BeanHandler<Users>(Users.class), param);
      //3.查询所有个数:ScalarHandler
     Long count=(Long) qr.query(sql, new ScalarHandler<Object>());
    //4.MapListHandler
    List<Map<String,Object>> list=qr.query(sql, new MapListHandler());
    //5.将某列的值封装到List集合中
    String sql="select * from product where pname like ? limit 0,8";
            List<Object> query = qr.query(sql, new ColumnListHandler("pname"), "%"+word+"%");

     四、JdbcTemplate

           1.Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

            * 步骤:

                1. 导入jar包
               2. 创建JdbcTemplate对象。依赖于数据源DataSource
                   * JdbcTemplate template = new JdbcTemplate(ds);

               3. 调用JdbcTemplate的方法来完成CRUD的操作

                * update():执行DML语句。增、删、改语句

                * queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

                     * 注意:这个方法查询的结果集长度只能是1

                * queryForList():查询结果将结果集封装为list集合

                        * 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

                      * query():查询结果,将结果封装为JavaBean对象

                          * query的参数:RowMapper

                            * 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

                            * new BeanPropertyRowMapper<类型>(类型.class)

                       * queryForObject:查询结果,将结果封装为对象

                          * 一般用于聚合函数的查询

    例:

      //1. 获取JDBCTemplate对象
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
     
    //添加一条记录
    int count = template.update(sql, 1015, "郭靖", 10);
    
    //删除刚才添加的记录
    int count = template.update(sql, 1015);
    
    //查询id为1001的记录,将其封装为Map集合
     Map<String, Object> map = template.queryForMap(sql, 1001,1002);
    
    // 查询所有记录,将其封装为List
     List<Map<String, Object>> list = template.queryForList(select * from emp);
    
    //查询总记录数
     Long total = template.queryForObject(sql, Long.class);
    
      //查询所有记录,将其封装为Emp对象的List集合
          List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));

                  

               

                             

  • 相关阅读:
    关于本人对javascript闭包的理解
    关于闭包内存泄露的处理方法
    javascript超时调用、间歇调用
    浏览器加载和渲染html的顺序
    CSS hack
    JS在操作IE与FF的一些区别
    javascript对select option操作
    jsp端使用ApplicationContext
    人生的35个经典好习惯
    2008个人总结
  • 原文地址:https://www.cnblogs.com/cqyp/p/12433184.html
Copyright © 2011-2022 走看看