目录
DBUtils查询数据
匿名内部类方式
反射方式
反射方式查询数据的触发器分类
多表查询
DBUtils增加,删除,修改数据
前言
使用DBUtils操作数据库,会更加的方便,因为它封装了JDBC的代码,这里我们配合c3p0使用
并不是说一定要用c3p0,因为使用DBUtils 的时候需要手动传递一个Connection对象,所以只需要对象
即可,这里仅仅是拿c3p0作为例子
DBUtils 的简介和概念 https://www.cnblogs.com/CQY1183344265/p/5854418.html
总的来说,就是方便的操作数据库,并且不需要我们自己手动释放资源
首先我们创建一个bean类
这个类里的字段和数据库一致,并且所有的字段都加上get/set方法
DBUtils查询数据
匿名内部类方式
这种方式较为复杂,而且代码量居多,并不适合
public static void main(String[] args) throws SQLException{// 创建连接池对象并且自动加载配置文件,这里我们使用的是C3P0ComboPooledDataSource dataSource1 = new ComboPooledDataSource();// DBUtils只是帮我们简化CRUB代码,还是需要传递连接对象的// 里面会自动调用getConnectionQueryRunner queryRunner1 = new QueryRunner(dataSource1);String sql = "select * from bank where id=?";//查询一条数据//query的第二个参数我们这里填的是ResultSetHandler接口额,并且使用了匿名内部类//在查询某一条数据的时候,用ResultSetHandler//第3个参数在最后面,是一个1,也就是查询出id为1的那条数据queryRunner1.query(sql, new ResultSetHandler<Account>() {// ResultSetHandler接口的方法,需要我们实现public Account handle(ResultSet rs) throws SQLException{//新建Account内容,并且在下面填充数值Account account2 = new Account();//遍历出数据while (rs.next()){//从查询结果中获取数值并且填充到Account里int id = rs.getInt("id");String name = rs.getString("name");int money = rs.getInt("money");account2.setId(id);account2.setName(name);account2.setMoney(money);// 输出结果account2.toString();}//这里需要返回我们新建的对象return account2;}//这个后面的1,就是第3个参数}, 1);}
反射方式
利用反射机制,将数据自动填充到bean里
public static void testSelect2() throws SQLException{// 创建连接池对象并且自动加载配置文件,这里我们使用的是C3P0ComboPooledDataSource dataSource1 = new ComboPooledDataSource();// 创建查询对象,我们传入dataSource,里面应该会自动调用getConnectionQueryRunner queryRunner1 = new QueryRunner(dataSource1);String sql = "select * from bank where id=?";//查询单条数据//第2个参数传入触发器,查询单条数据用 BeanHandler,泛型填我们要填充的对象//触发器的参数是要填充对象的类描述符//然后函数内部会自动去调用get,set方法,如果我们去掉了get set方法就获取不到数值Account account1 = queryRunner1.query(sql, new BeanHandler<Account>(Account.class), 1);account1.toString();System.out.println("==========下面是查询多个===================");sql = "select * from bank";//查询多条数据,用到 BeanListHandlerList<Account> list1 = queryRunner1.query(sql, new BeanListHandler<Account>(Account.class));for (Account account : list1){account.toString();}//如果sql语句中使用了聚合函数,那么就必须使用ScalarHandler Scalar标量,数量 //因为聚合函数返回的是标准(基本)的数据类型,比如Longsql="select count(*) from bank where name=?";Long num=(Long)queryRunner1.query(sql,new ScalarHandler(),"bbb");System.out.println("num=="+num);}
反射方式查询数据的触发器分类
多表查询
MapListHandler
DBUtils增加,删除,修改数据
使用DBUtils做这些事情,就变的十分简单了,只需要使用update即可,剩下的只需要我们写相应的sql语句
public static void main(String[] args) throws SQLException{// 创建连接池对象并且自动加载配置文件,这里我们使用的是C3P0ComboPooledDataSource dataSource1 = new ComboPooledDataSource();// DBUtils只是帮我们简化CRUB代码,还是需要传递连接对象的// 里面应该会自动调用getConnectionQueryRunner queryRunner1 = new QueryRunner(dataSource1);// update可以实现增加,删除,更新String sql = "insert into bank values(null,'test1',123)";queryRunner1.update(sql);}