JDBC:c3p0和DbUtils

c3p0和DbUtils的小案例:

  • 创建SQL语令
    create table User1(
    id int primary key not null auto_increment,
    username varchar(20),
    password varchar(20)
    );

  • eclipse中详细步骤

  1. 导入jar包 分别有数据库连接包、c3p0包、c3p0依赖包、DbUtils包
    jar的网盘分享地址为:https://pan.baidu.com/s/1PRFNCJfUUHDyNlpT-oxjVA
    提取码:u9rb

  2. 编写c3p0-config.xml文件

       
       
           
               com.mysql.jdbc.Driver
               jdbc:mysql:///chu1
               root
               szxy
               5
               20
           
       
    
  3. 创建utils包、service包、bean包、test包

    • utils包中创建名为JdbcUtils类,在类中创建静态获取数据池中的资源,创建连接方法、关闭资源
    public class JdbcUtils{
        public static Datasource  ds= null;
    
        static {
            ds= new ComboPooledDataSource("pool");
        }
        
        public static DataSource getDataSource(){
            return ds;
        }
    
    
        public static Connection  getConnection() throws SQLException{
            return ds.getConnection();
        }
    
        public static void close(Connection conn ,Statement  stmt,ResultSet set){
            close();
        }
    
    }
    
    
    

    domain实体类

    package com.h3.domain;
    
     public class User {
     private  int id;
     private  String username;
     private  String password;
    
     public User() {
     }
    
     public User(int id, String username, String password) {
         this.id = id;
         this.username = username;
         this.password = password;
     }
    
     public int getId() {
         return id;
     }
    
     public void setId(int id) {
         this.id = id;
     }
    
     public String getUsername() {
         return username;
     }
    
     public void setUsername(String username) {
         this.username = username;
     }
    
     public String getPassword() {
         return password;
     }
    
     public void setPassword(String password) {
         this.password = password;
     }
    
     }
    
    
    
    

    service类

     public class JdbcService {
    
         //DButils的QueryRunner去池中找数据
         private QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
    
    
         public int addUser(String username, String password) throws SQLException {
             String sql = "insert into user values (null,?,?)";
    
             int row = qr.update(sql, username, password);
             return row;
         }
    
         public int deleteUser(int id) throws SQLException {
             String sql = "delete from user where id = ?";
             int row = qr.update(sql, id);
             return row;
         }
    
         public  int updateUser(int id, String password) throws SQLException {
             String sql="update user set password =? where id =?";
             int row = qr.update(sql,password,id);
             return  row;
    
         }
    
         //查看所有的信息
         // BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
         public void selectAll() throws SQLException {
             String sql = "select * from user";
     //      qr.ResultSetHandler 这是接口  BeanListHander 是实现类
     //      BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
     //        把结果集转为一个 Bean 的 List, 并返回.。Bean的类型在创建
     //        BeanListHanlder对象时以 Class对象的方式传入,可以适应列的别名来映射 JavaBean 的属性名
     //      query(String sql, Object[] params, ResultSetHandler rsh):
     //      方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
    
             List user = qr.query(sql, new BeanListHandler(User.class));
             for (User u : user) {
                 System.out.println(u.getId() + "--" + u.getUsername() + "--" + u.getPassword());
             }
         }
    
         //把结果集转为一个 Bean,并返回
         //Bean的类型在创建BeanHandler 对象时以 Class 对象的方式传入 BeanHandler(Class type)。
         //BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
         public User selectOneUser(int id) throws SQLException {
             String sql = "select * from user where id = ?";
             User u = qr.query(sql, new BeanHandler(User.class), id);
             return u;
         }
    
         // ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。
         // 可以返回指定列的一个值或返回一个统计函数的值,比如count(1)
         public void select(String xing) throws SQLException {
             String sql = "select count(*) from user where username like ? ";
             long count = qr.query(sql, new ScalarHandler<>(), xing + "%");
             System.out.println(count);
         }
    
     }
    
    

    测试类

    public class JdbcTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        JdbcService service = new JdbcService();
    
        try {
            for (; ; ) {
                System.out.println("请输入 1.添加 2.删除 3.修改 4.查所有 5.查单人 6.查姓X的人 7.退出");
                switch (sc.next()) {
                    case "1":
                        System.out.println("请输入用户名");
                        String username = sc.next();
                        System.out.println("请输入密码");
                        String password = sc.next();
                        int addRow = service.addUser(username, password);
                        if (addRow > 0) {
                            System.out.println("添加成功");
                        } else {
                            System.out.println("添加失败");
                        }
                        break;
                    case "2":
                        System.out.println("请输入id");
                        int delId = sc.nextInt();
                        int delRow = service.deleteUser(delId);
                        if (delRow > 0) {
                            System.out.println("删除成功");
                        } else {
                            System.out.println("删除失败");
                        }
                        break;
                    case "3":
                        System.out.println("请输入id");
                        int updateId = sc.nextInt();
                        System.out.println("请输入新密码");
                        String newPwd = sc.next();
                        int updateRow = service.updateUser(updateId, newPwd);
                        if (updateRow > 0) {
                            System.out.println("修改成功");
                        } else {
                            System.out.println("修改失败");
                        }
                        break;
                    case "4":
                        service.selectAll();
                        break;
                    case "5":
                        System.out.println("请输入id");
                        int selectId = sc.nextInt();
                        User u = service.selectOneUser(selectId);
                        if (u == null) {
                            System.out.println("查无此人");
                        } else {
                            System.out.println(u.getId() + "--" + u.getUsername() + "--" + u.getPassword());
                        }
                        break;
                    case "6":
                        System.out.println("请输入姓");
                        String xing = sc.next();
                        service.select(xing);
                        break;
                    case "7":
                        System.out.println("再见");
                        return;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

#相关的知识点:

为了简化Jdbc技术的操作-----DBUtils
Apache组织提供的一个对JDBC进行简单封装的开源工具类库

作用:DBUtils主要负责转载驱动、关闭连接的工作
dbutil的作用 不用自己关闭资源
DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装
用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
在开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,所以通常用连接池结束,来共享连接Connection.这样就不用每次都创建连接,释放链接了,这些操作都交给连接池.

QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。它包含以下几个方法:

  1. query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。

  2. query (String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。

  3. query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。

  4. update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。

  5. ResultSetHandler 的作用: QueryRunner 的 query 方法的返回值最终取决于 query 方法的 ResultHandler 参数的 hanlde 方法的返回值。

  6. BeanListHandler: 把结果集转为一个 Bean 的 List, 并返回.。Bean的类型在创建 BeanListHanlder对象时以 Class对象的方式传入,可以适应列的别名来映射 JavaBean 的属性 名: String sql = "SELECT id, name customerName, email, birth " + “FROM customers WHERE id = ?”; BeanListHandler(Class type)。

  7. BeanHandler: 把结果集转为一个 Bean,并返回.。Bean的类型在创建BeanHandler 对象时以 Class 对象的方式传入 BeanHandler(Class type)。

  8. MapHandler: 把结果集转为一个 Map 对象, 并返回。若结果集中有多条记录, 仅返回 第一条记录对应的Map对象.。Map的键: 列名(而非列的别名), 值: 列的值。

  9. MapListHandler: 把结果集转为一个 Map 对象的集合, 并返回.。Map的键: 列名(而非列的别名), 值: 列的值。

  10. ScalarHandler: 可以返回指定列的一个值或返回一个统计函数的值,比如count(1)。

你可能感兴趣的:(JDBC:c3p0和DbUtils)