jdbc(3)

最后一天jdbc的学习总结,学完咯,用了3天,还是长了一点,今天学了数据库连接池和dbutils的使用
数据库连接池是什么?
用户在申请数据库连接时,通常会获取一个Connection和一个preparedstatement,但是如果一次性的有太多的用户来申请了数据库的使用,这时候数据库可能就顶不住了,就像双十一的用户量,正常的数据库怎么会顶得住大量的访问呢,这时候就出现了数据库连接池,来规划用户的访问,它会设计最大的Connection的建立和最小的建立,同样他会对preparedstatement的数量进行一个限制。
但是数据库连接池有很多种,现在主流的是druid,我就直接学了这个,其他的就随便了解了一下,其实差不多,就是导入的包不太一样(嘿嘿嘿),在用法上没什么区别,但是底层的源码就不知道了。
代码如下:

public Connection druidcon() throws Exception {
		//建立一个配置文件来存放配置信息
        Properties pro = new Properties();
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
        //获得druid的连接
        Connection con = dataSource.getConnection();
        System.out.println(con);
        return con;
    }

看着是挺简单的,但是还真是挺简单的
下面就是dbutils的使用了,别下错了,是有s,不是dbutil,我就下错了,包里没有QueryRunner,还找了半天。
代码如下:

/**
     * 测试dbutils中的update
     */
    @Test
    public void testqueryupdate() {
        int i = 0;
        Connection con = null;
        try {
            con = druidcon();
            //得到query工具类
            QueryRunner queryRunner = new QueryRunner();
            String sql = "insert into user(user,password) value(?,?)";
            i = queryRunner.update(con, sql, "handidi", "987654");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                until.close(con,null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        System.out.println("添加成功了"+i+"条记录");
    }

    /**
     * 一条记录的查询
     */
    @Test
    public void testquery() {
        Connection con = null;
        QueryRunner runner = null;
        try {
            con = druidcon();
            runner = new QueryRunner();
            String sql = "select user,password from user where password = ?";
            BeanHandler<user> handler = new BeanHandler<>(user.class);
            user user = runner.query(con, sql, handler, "123456");
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                until.close(con,null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 多条记录的查询
     */
    @Test
    public void testquerylist() {
        Connection con = null;
        QueryRunner runner = null;
        try {
            con = druidcon();
            runner = new QueryRunner();
            String sql = "select xh,name,broth from student where xh < ?";
            BeanListHandler<student> handler = new BeanListHandler<>(student.class);
            List<student> studeng = runner.query(con, sql, handler, 10);
            studeng.forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                until.close(con,null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 特定值的查找
     */
    @Test
    public void testqueryvalue() {
        Connection con = null;
        QueryRunner runner = null;
        try {
            con = druidcon();
            runner = new QueryRunner();
            String sql = "select count(*) from user";
            BeanHandler<user> handler = new BeanHandler<>(user.class);
            ScalarHandler scalarHandler = new ScalarHandler();
            Long count =(Long) runner.query(con, sql, scalarHandler);
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                until.close(con,null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

涉及到了Handler类的接收,必须定义一个Handler类就接收查询语句的返回值,但是Handler有很多,我只使用了BeanHandler和ScalarHandler,
还有一个带list的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值