传智播客学习日记Day20

来源:互联网 发布:淘宝皮草专卖 编辑:程序博客网 时间:2024/05/22 10:27

今天是jdbc学习的第三天,通过这几天的学习,学会了怎样编写java程序对数据库进行增删改查,老师的讲解独到,精辟,编写代码的风格严谨,做到精益求精,一段要写很多行的代码,老师教我们抽取多余的代码,得到通用并且精简的代码。

一步一个脚印,老师依然为我们复习了昨天的内容:

1.事务的ACID属性(举例了银行取钱的列子)

2.JDBC的事务处理(强调在出现异常时,调用rollback();方法回滚事务)

3.批处理JDBC语句提高处理速度(记住使用的方法addBatch(String) executeBatch();)

4.Statement的批量处理

5.PreparedStatement批量传参

......

接着老师讲解了这两天我们做的练习题。老师教我们怎么进行DAO的重构,

以下是重构的部分代码:

packagecd.itcast.jdbc.day1.util;

 

importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.util.ArrayList;

importjava.util.List;

 

publicclass DBExecutor {

       Connection conn = null;

       PreparedStatement preSate = null;

protectedvoid update(String sql,Object...params){

       try {

              conn= DBUtil.getConn();

              preSate = conn.prepareStatement(sql);

              for(inti=1;i<params.length;i++){

                     preSate.setObject(i,params[i]);

              }

              int n = preSate.executeUpdate();

              System.out.println("一共影响了:" + n);

       } catch (SQLException e) {

              e.printStackTrace();

       }finally {

              DBUtil.close(conn, preSate, null);

       }

}

protectedObject getObject(String sql,HandlderResult hr,Object...params){

       ResultSet rs = null;

       try{

              conn= DBUtil.getConn();

              preSate =conn.prepareStatement(sql);

              for(inti=1;i<params.length;i++)

                     preSate.setObject(i,params[i]);

              rs =  preSate.executeQuery();

              Object object=rs.next();

              System.out.println("--------------"+object);

              if(object!=null){

                     return hr.getResult(rs);

              }

       }catch(Exception e){

       }finally{

              DBUtil.close(conn, preSate, rs);

       }

       return null;

}

protectedObject getList(String sql,HandlderResult hr,Object...params){

       List<Object> list=newArrayList<Object>();

       ResultSet rs = null;

       try{

              conn= DBUtil.getConn();

              preSate =conn.prepareStatement(sql);

              rs =  preSate.executeQuery();

              while(rs.next()){

                     list.add(hr.getResult(rs));

     }

              return list;

       }catch(Exception e){

       }finally{

              DBUtil.close(conn, preSate, rs);

       }

       return list;

}

}

这种方式是自己编写工具类。我们也可以使用dbutils,使用dbutils要导入第三方的:commons-dbutils-1.5.jar。

使用dbutils我们常常要用到:QueryRunner类。

1.创建一个QueryRunner类的实例:

QueryRunnerqueryRunner=new QueryRunner(DBUtil.getDataSource());

QueryRunner类的主要方法:

public Object query(Connection conn, Stringsql, Object[] params, ResultSetHandler rsh) throws SQLException:
执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。

public int update(Connection conn, Stringsql, Object[] params) throws SQLException:
用来执行一个更新(插入、更新或删除)操作。

public int update(Connection conn, String sql) throws SQLException:
用来执行一个不需要置换参数的更新操作。