数据库基础(五):DBUtils

1.元数据
2.DBUtils的增删改查
3.DBUtils增删改查的底层原理
4.DBUtils控制事务
 

1.元数据

           (1).数据库、表、列的元数据

                      DataBaseMetaData meta = (DataBaseMetaData)conn.getMetaData();//获取数据库元数据

                                 meta.getUserName();           //获取数据库用户名

                                 meta.getDriverName();           //获取数据库驱动名

                      rs = meta.getTables(null,null,"user",new String[]{"TABLE"});//获取表

                      while(rs.next()){

                                 String tableName = rs.getString("TABLE_NAME");

                      }

                      rs = meta.getPrimaryKeys(null,null,"user");//获取主键

                      while(rs.next()){

                                 short seq  =  rs.getString("KEY_SEQ");//获取序号

                                 String columnName = rs.getString("COLUMN_NAME");//获取列名

                      }

           (2).参数元数据

                      ParameterMetaData meta = ps.getParameterMetaData();

                      meta.getParameterCount();//获取参数个数

                      meta.getParameterTypeName();//获取参数类型

           (3).结果集元数据

                      ResultMetaData meta = rs.getMetaData();

                      meta.getColumnCount();//获取结果集中列数

                      meta.getColumnName(2);//查询指定列名

                      meta.getColumnTypeName(2);//查询指定列类型

                      while(rs.next()){//遍历结果集

                                 for(int i = 0;i<meta.getColumnCount();i++){

                                            Object obj = rs.getObject(i);

                                 }

                      }

                      

2.DBUtils的增删改查

           (1).DBUtils的增删改是一样的:

                      public void update() throws SQLException{

                                 QueryRunner runner = new QueryRunner(new ComboPooledDataSource());

                                 runner.update("update user set password = ? where name = ?",123,"penggege");

                      }

           (2).DBUtils的查询:

                      public void query() throws SQLException{

                                 QueryRunner runner = new QueryRunner(new ComboPooledDataSource());

                                 List<User> list = runner.query("select * from user where id > 2",

                                           new ResultSetHandler<list<User>>(){ 

                                                       public List<User> handle(ResultSet rs) throws SQLException {

                                                                  List<User> list = new ArrayList<User>();

                                                                  while(rs.next()){

                                                                             User user = new User();

                                                                             user.setId(rs.getInt("id"));

                                                                             user.setName(rs.getString("name"));

                                                                             list.add(user);

                                                                  }

                                                                  return list;

                                                       }

                                            }

                                 ,2);

                      }

3.DBUtils增删改查的底层原理

           增删改:

                      public class MyQueryRunner{

                                 private DataSource source = null;

                                 public MyQueryRunner(){}

                                 public MyQueryRunner(DataSource source){

                                            this.source = source;

                                 }

                                 public int update(String sql,Object... params) throws SQLException{

                                            Connection conn = source.getConnection();

                                            PreparedStatement ps = conn.prepareStatement(sql);

                                            ParameterMetaData meta = ps.getParameterMetaData();

                                            for(int i = 0;i<meta.getParameterCount();i++){

                                                       ps.setObject(i+1,params[i]);

                                            }

                                            int num = ps.executeUpdate();

                                            Dbutils.closeQuietly(conn,ps,null);

                                            return num;

                                 }

           查:(基本同增删改,只是在处理结果集的时候用到了回调函数)

                      public <T> T query(String sql,ResultSetHandler<T> rsh,object... params){

                                            Connection conn = source.getConnection();

                                            PreparedStatement ps = conn.prepareStatement(sql);

                                            ParameterMetaData meta = ps.getParameterMetaData();

                                            for(int i = 0;i<meta.getParameterCount();i++){

                                                       ps.setObject(i+1,params[i]);

                                            }

                                            ResultSet rs = ps.executeQuery();

                                            T t = ResultSetHandler.handle(rs);

                                            Dbutils.closeQuietly(conn,ps,rs);

                                            return t;

                      }

           回调函数:方法A需要调用方法B,但是B想要运行下去又需要A的结果,所以B运行到一半回到A向A讨要A的结果然后继续运行

4.DBUtils控制事务

           (1).需要控制事务

                      QueryRunner()

                      int update(Connection conn,String sql)

                      <T> T query(Connection conn,String sql,ResultSetHandler<T> rsh)

           (2).不需要控制事务

                      QueryRunner(DataSource ds)

                      int update(String sql)

                      <T> T query(String sql,ResultSetHandler<T> rsh)

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/86511433