zoukankan      html  css  js  c++  java
  • java学习日记(day30--dbutils)

    01DButils工具类的介绍个三个核心类
      * A: DButils工具类的介绍个三个核心类
        * a: 概述
          * DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
          * ,DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。
        * b: Dbutils三个核心功能介绍
          * QueryRunner中提供对sql语句操作的API.
          * update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作
          * query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params
          ,用来完成表数据的查询操作
          * ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
          * DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

    03QueryRunner类的update方法

      * update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作
      * Object...param 可变参数,Object类型,SQL语句会出现?占位符

    04QueryRunner类实现insert添加数据
    05QueryRunner类实现update删除数据
    06QueryRunner类实现delete删除数据

        public static void update() throws SQLException{
            Connection con = JDBCUtilConfig.getConnection();
            QueryRunner qr = new QueryRunner();
            
            String sql = "update sort set sprice=? where sid=?";
            Object[] params = {100,4};
            qr.update(con, sql, params);
            DbUtils.closeQuietly(con);
        }
        
        public static void delete() throws SQLException{
            
            Connection con = JDBCUtilConfig.getConnection();
            QueryRunner qr = new QueryRunner();
            
            String sql = "delete from sort where sid =?";
            Object[] params = {4};
             qr.update(con, sql, params);
            
            DbUtils.closeQuietly(con);
        }
        
        
        public static void insert() throws SQLException{
            
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            String sql = "insert into sort(sid, sname,sprice, sdesc) values(?,?,?,?)";
            //将三个?占位符的实际参数,写在数组中
            Object[] param = {4, "风扇", 50, "超强风力"};
            
            qr.update(conn, sql, param);
            
            DbUtils.closeQuietly(conn);
        }
    View Code

    07JavaBean类
      * A: JavaBean类,将数据库中的数据用类对象表示,具有以下特性
        1. 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
        2. 提供私有字段:private 类型 字段名;
        3. 提供getter/setter方法:
        4. 提供无参构造

    08DBUtils工具类结果集处理的方式
      * A: DBUtils工具类结果集处理的方式
        * a: QueryRunner实现查询操作
          * query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作
        * b: ResultSetHandler结果集处理类
          * ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
          * ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
          * BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
          * BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
          * ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中
          * ScalarHandler 它是用于单数据。例如select count(*) from 表操作。
          * MapHandler 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
          * MapListHandler 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合

    09QueryRunner类的方法query
      * A: QueryRunner类的方法query
        * 调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object..params)
        * ResultSetHandler r 结果集的处理方式,传递ResultSetHandler接口实现类
        * Object..params SQL语句中的?占位符
        * 注意: query方法返回值,返回的是T 泛型, 具体返回值类型,跟随结果集处理方式变化

    10结果集处理ArrayHandler
    11结果集处理ArrayListHandler
    12结果集处理BeanHandler
    13结果集处理BeanListHandler
    14结果集处理ColumnListHandler
    15结果集处理ScalarHandler
    16结果集处理MapHandler
    17结果集处理MapListHandler

        public static void arraySelect() throws SQLException{
            //建立连接
            Connection conn = JDBCUtilConfig.getConnection();
            
            //创建QueryRunner类对象
            QueryRunner qr =new QueryRunner();
            
            String sql = "SELECT * FROM sort";
            Object[] objArr =  qr.query(conn, sql, new ArrayHandler());
            
            for(Object o : objArr){
    
                System.out.println(o);
            }
        }
        
        
        
        public static void arrayListSelect() throws SQLException{
            
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            String sql = "SELECT * FROM sort";
            
            // 一定是List接口,不能为ArrayList
            List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
            
            for(Object[] obj : list){
                System.out.println(Arrays.toString(obj));
            }
        }
        
        public static void beanSelect() throws SQLException{
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            String sql = "SELECT * FROM sort";
            SqlObject bean =   qr.query(conn, sql,new BeanHandler<SqlObject>(SqlObject.class));    
            System.out.println(bean);
        }
        
        public static void beanListSelect() throws SQLException{
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            String sql = "SELECT * FROM sort";
            List<SqlObject> beanList =   qr.query(conn, sql,new BeanListHandler<SqlObject>(SqlObject.class));    
            for(SqlObject bean : beanList){
                System.out.println(bean);
            }
        }
        
        public static void mapSelect() throws SQLException{
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            
            String sql =  "SELECT * FROM sort";
            Map<String, Object> map = qr.query(conn, sql, new MapHandler());
            
            map.forEach((key, value)->{
                System.out.println(key + "	" + value);
            });
            
        }
        
        public static void mapListSelect() throws SQLException{
            
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            
            String sql =  "SELECT * FROM sort";
            List<Map<String, Object>> mapList = qr.query(conn, sql, new MapListHandler());
            
            mapList.forEach(m->{
    
                m.forEach((key,value)->{
                    System.out.println(key + "	" + value);
                });
            });
            
        }
        
        public static void colSelect() throws SQLException{
            Connection conn = JDBCUtilConfig.getConnection();
            
            QueryRunner qr = new QueryRunner();
            
            String sql =  "SELECT * FROM sort";
            List<Object> list = qr.query(conn, sql, new ColumnListHandler<Object>("sname"));
            
            System.out.println(list);
            
        }
        
        public static void scalarSelect() throws SQLException{
            
            Connection conn = JDBCUtilConfig.getConnection();
            QueryRunner qr = new QueryRunner();
            
            String sql =  "SELECT COUNT(*) FROM sort";
            Long l  = qr.query(conn, sql, new ScalarHandler<Long>());
            
            System.out.println(l);
            
        }
    View Code

    ###18连接池介绍
    * A: 连接池介绍
      * a: 连接池介绍
        * 实际上就是存放连接的池子(容器)
        * 在开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程
        * 为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。
        * 这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池

    ###19连接池概念规范和DataSource接口
      * A: 连接池概念规范和DataSource接口
        * a: 连接池概念规范
          * 用池来管理Connection,这样可以重复使用Connection。
          * 不用自己来创建Connection,而是通过池来获取Connection对象
          * 使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池
          * 连接池技术可以完成Connection对象的再次利用
        * b: DataSource接口
          * Java为数据库连接池提供了公共的接口:javax.sql.DataSource
          * 各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池
          * 常见的连接池:DBCP、C3P0
    ###20DBCP连接池介绍
    * A: DBCP连接池介绍
      * a: DBCP连接池介绍
        * DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池

    ###21导入jar包
    * A: 导入jar包
    * a: jar包介绍
    * mysql-connector-java-5.1.37-bin.jar:数据库驱动
    * commons-dbutils-1.6.jar:提供QueryRunner类方便进行增删改查操作
    * commons-dbcp-1.4.jar:
    * commons-pool-1.5.6.jar:提供高效的数据库连接池技术
    * b: 导入jar包
    * 在项目根路径下建立文件夹lib
    * 拷贝以上jar包,选定拷贝的jar包/右键/Build Path/Add to Build Path

    22BasicDataSource类的使用

        /*
         * 连接池jar包中,定义好一个类 BasicDataSource 实现类数据源的规范接口                 javax.sql.DataSource
         */
            public class DataSoruceDemo {
            public static void main(String[] args) {
                // 创建DataSource接口的实现类对象
                // 实现类, org.apache.commons.dbcp
                BasicDataSource dataSource = new BasicDataSource();
                // 连接数据库的4个最基本信息,通过对象方法setXXX设置进来
                dataSource.setDriverClassName("com.mysql.jdbc.Driver");
                dataSource.setUrl("jdbc:mysql://localhost:3306/mybase");
                dataSource.setUsername("root");
                dataSource.setPassword("123");
    
                try {
                    // 调用对象方法getConnection获取数据库的连接
                    Connection con = dataSource.getConnection();
                    System.out.println(con);
                } catch (SQLException ex) {
                    // System.out.println(ex);
                    ex.printStackTrace();
                    throw new RuntimeException("数据库连接失败");
                }
            }
        }
            
    View Code

    ###23BasicDataSource类的常见配置
    * A: BasicDataSource类的常见配置
    必须项
    driverClassName 数据库驱动名称
    url 数据库的地址
    username 用户名
    password 密码
    基本项(扩展)
    maxActive 最大连接数量
    minIdle 最小空闲连接
    maxIdle 最大空闲连接
    initialSize 初始化连接


    24实现数据库连接池工具类

    public class MySqlUtils {
    
        private static String driverClass;
        private static String url;
        private static String user;
        private static String password;
        private static String initialSize;
        private static String maxActive;
        private static String maxIdle;
        private static String minIdle;
        private static BasicDataSource bs = new BasicDataSource();
        
        static{
            
            InputStream inStream = MySqlUtils.class.getClassLoader().
                    getResourceAsStream("database.properties");
            
            Properties pro = new Properties();    
            
            try {
                
                pro.load(inStream);
                
                driverClass = pro.getProperty("driverClass");
                url = pro.getProperty("url");
                user = pro.getProperty("user");
                password = pro.getProperty("password");
                
                initialSize = pro.getProperty("initialSize");
                maxActive = pro.getProperty("maxActive");
                maxIdle = pro.getProperty("maxIdle");
                minIdle = pro.getProperty("minIdle");
                
                bs.setDriverClassName(driverClass);
                bs.setUrl(url);
                bs.setUsername(user);
                bs.setPassword(password);
                
                
                if(initialSize != null){
                    bs.setInitialSize(Integer.parseInt(initialSize));
                }
                if(maxActive != null){
                    bs.setMaxActive(Integer.parseInt(maxActive));
                }
                if(maxIdle != null){
                    bs.setMaxIdle(Integer.parseInt(maxIdle));
                }
                if(minIdle != null){
                    bs.setMinIdle(Integer.parseInt(minIdle));
                }
                        
            } catch (IOException e) {        
                e.printStackTrace();
                throw new RuntimeException();
            }     
        }
        
        public static BasicDataSource getBasicDataSource(){
            return bs;
        }
    View Code


    25工具类的测试

    /*
    * 测试写好的工具类,
    * 提供的是一个DataSource接口的数据源
    * QueryRunner类构造方法,接收DataSource接口的实现类
    * 后面,调用方法update,query,无需传递他们Connection连接对象
    */
    
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.ArrayListHandler;
    
    import cn.itcast.jdbcutils.JDBCUtils;
    
    public class QueryRunnerDemo {
        public static void main(String[] args) {
            select();
        }
    
        // 定义2个方法,实现数据表的添加,数据表查询
        // QueryRunner类对象,写在类成员位置
        private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    
        // 数据表查询
        public static void select() {
            String sql = "SELECT * FROM sort";
            try {
                List<Object[]> list = qr.query(sql, new ArrayListHandler());
                for (Object[] objs : list) {
                    for (Object obj : objs) {
                        System.out.print(obj + "	");
                    }
                    System.out.println();
                }
            } catch (SQLException ex) {
                throw new RuntimeException("数据查询失败");
            }
        }
    
        // 数据表添加数据
        public static void insert() {
            String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
            Object[] params = { "水果", 100.12, "刚刚上市的核桃" };
            try {
                int row = qr.update(sql, params);
                System.out.println(row);
            } catch (SQLException ex) {
                throw new RuntimeException("数据添加失败");
            }
        }
    View Code
  • 相关阅读:
    字符串翻转
    windows套接字相关函数
    Windows多线程同步系列之一-----互斥对象
    Dos命令---ipconfig
    windows多线程没那么难
    CreateThread简单那多线程编程
    TCP/IP协议详解概述
    正则表达式小试牛刀--匹配我的csdn博文标题
    wireshark----教你如何抓包
    HDU1385 (Floyd记录路径)
  • 原文地址:https://www.cnblogs.com/YKang/p/7355823.html
Copyright © 2011-2022 走看看