JavaWeb系列之十四(DBUtil)

来源:互联网 发布:ddc控制器编程 编辑:程序博客网 时间:2024/06/06 00:55

1.数据库的元数据
    元数据:数据库,或则数据库表,表中的字段额度一些信息
    比如数据库名称,驱动,表中的主键的名称
    主要完成一些通用性比较高的代码
    数据库里面,有三类元数据:
    第一类:数据库元数据
    获取元数据:Connection.getMateData();得到数据元数据
    DatabaseMateData里面的方法:getDriverName(),getURL(),getUserName(),
    getTables(), rs=db.getTables("", "", "user", new String[]{"TABLE"});前面两个是空,第三个是表名,
    getPrimaryKeys()获取表的主键
    第二类:参数元数据
    通过PraparedStatatment 里面的getParaneterMetaData()里面得到参数元数据,ParameterMetaData代表一个参数
    getParameterMetaData   getParameterTypeName();
    在mysql里面对参数元参数支持不是很好
     
    第三类:结果集元数据
    ResultSetMetaData对象:getParameterCount():得到参数的数量(就是?的数量);

2.DBUtils框架的使用
    DBUtils是Apache 组织提供的一个开源 JDBC工具类库。
    操作的dubuils里面的类都在org.apache..包里面
    dbutils使用很简单,在很多公司里面不想使用hibernate,因为使用hibernate如果使用不好,会产生性能问题,
 很多公司而是使用DBUtils框架完成jdbc的操作。
    想要使用DBUtils框架,首先导入jar包。
    需要使用到的类有两个
    第一个 : DbUtils
    一些方法:
    - close(Connection conn)
    - loadDriver(String driverClassName)
    - rollback(Connection conn)
    第二个:QueryRunner:完成对数据库的crud的操作
    方法:
    - 构造方法,常用的有两个
    QueryRunner()
    如果使用没有参数的构造方法,需要使用下面的方法
    - update(Connection conn, String sql, Object... params)
    - query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
    QueryRunner(DataSource ds)(重点掌握)
    如果使用有参数的构造方法 ,使用里面参数是DataSource的构造方法,
    - update(String sql, Object... params) :完成增加修改和删除的操作
    - query(String sql, ResultSetHandler<T> rsh, Object... params):完成查询的操作
    (1)使用dbutils使用增加,修改和删除的操作
    代码
    //实现增加的操作
    QueryRunner runner = new QueryRunner(MyJDBCUtils.getDataSource());
    //update(String sql, Object... params) :完成增加修改和删除的操作
    runner.update("insert into user values(?,?,?)", 666,"孙悟空",20000);
    //实现修改的操作
    runner.update("update user set sal=? where id=?", 555,111);    
    //实现删除的操作
    runner.update("delete from user where id=?", 222);
    一个接口
    ResultSetHandler<T>
 (2)使用dbutils使用查询的操作
    显示如果使用接口实现查询更加的复杂,但是在dbutils里面提供了很多这个接口的实现类,根据这些实现类完成想要的格式的封装
    直接new 实现类来实现操作 
    ArrayHandler:把数据封装到一个数组里面
    Object[] objs = runner.query("select * from user where id=?", new ArrayHandler(), 111);
    System.out.println(Arrays.toString(objs));   
    ArrayListHandler:把每行数据先放到数组里面,把多个数组放到list里面
    List<Object[]> list = runner.query("select * from user", new ArrayListHandler());
    for (Object[] objects : list) {
    System.out.println(Arrays.toString(objects));
    }
    BeanHandler:把数据封装到对象里面(重点掌握)
    User user = runner.query("select * from user where id=?", new BeanHandler<User>(User.class), 666);
    System.out.println(user.getId()+" "+user.getName()+" "+user.getSal());
    BeanListHandler:把数据放到对象里面,把多个对象放到list里面(重点掌握)
    List<User> list = runner.query("select * from user", new BeanListHandler<User>(User.class));
    for (User user : list) {
    System.out.println(user.getId()+" "+user.getName()+" "+user.getSal());
    }
    MapHandler:把数据封装到map里面
    Map<String, Object> map = runner.query("select * from user where id=?", new MapHandler(), 333);
    System.out.println(map);
    MapListHandler:先把数据封装到map里面,在把多个map放到list里面
    List<Map<String, Object>> list = runner.query("select * from user", new MapListHandler());
    for (Map<String, Object> map : list) {
    System.out.println(map);
    }
    ColumnListHandler:查询某一列的值,把值放到list里面 
    List<Object> list = runner.query("select name from user",new ColumnListHandler());
    for (Object object : list) {
    System.out.println(object);
    }
    KeyedHandler: 先把数据放到map里面,把封装之后的map作为一个value放到另外的一个map里面
    Map<Object, Map<String, Object>>  map = runner.
    query("select * from user", new KeyedHandler("name"));
    System.out.println(map);
    calarHandler : 进行单值查询 select count(*) from user;
    Object o = runner.query("select count(*) from user", new ScalarHandler());
    System.out.println((Long)o);
    掌握的实现类:BeanHandler   BeanListHandler    MapListHandler



0 0