使用元数据简化jdbc代码

来源:互联网 发布:淘宝上的图片怎么做的 编辑:程序博客网 时间:2024/06/06 18:39
 

使用元数据简化jdbc代码

一  简化的原因

       在daoImp层中,在写增删改查的时候,每次都要重写一次封装数据库对象,创建连接对象,定义sql语句,释放资源,在这些方法中,我们可以提取共同点,并把不同的定义sql语句并处理sql语句,当成参数传给一个方法,并用循环的方式输出也是个很好的操作

二 简化的实现

1.建框架---提取共同的部分并形成一个方法 

           // 建框架----更新的操作是增、删 、改

    public static void udpate(String sql, Object[] params) {

       Connection con = null;

       PreparedStatement st = null;

       ResultSet rs = null;

      

       try {

           con = DBManager_c3p0.getConnection();

           st = con.prepareStatement(sql);

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

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

           }  

           st.executeUpdate();

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           DBManager.release(con, st, rs);

       }

   }

//查询

public static Object find(String sql,Object[] params,ResultSetHandler rsh)throws Exception{

      

       Connection con=null;

       PreparedStatement st=null;

       ResultSet rs=null;

      

       try {

           con=DBManager.getConnection();

           st=con.prepareStatement(sql);

           for(int i=0;i<params.length;i++){

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

           }

           st.executeQuery();

           //对结果集的处理(框架的开发者不知道如何处理)

           //调用程序员传过来的对结果集进行处理的方法即可

           return rsh.handler(rs);

       }finally{

           DBManager.release(con, st, rs);

      }

注:

实例化:

public class User {

    private Integer id;

    private String name;

    private String email;

    private Date birthday;

    public Integer getId() {

       return id;

    }

    public void setId(Integer id) {

       this.id = id;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getEmail() {

       return email;

    }

    public void setEmail(String email) {

       this.email = email;

    }

    public Date getBirthday() {

       return birthday;

    }

    public void setBirthday(Date birthday) {

       this.birthday = birthday;

    }

}

 

接口类:

//结果集处理器的接口

public interface ResultSetHandler {

    public Object handler(ResultSet rs);

}

接口实现类:

public class MyResultHandler implements ResultSetHandler {

 

    @Override

    public Object handler(ResultSet rs) {

       // TODO Auto-generated method stub

       User user = new User();

       try {

           if(rs.next()){

              user.setId(rs.getInt(1));

              user.setName(rs.getString(2));

              user.setEmail(rs.getString(3));

              user.setBirthday(rs.getDate(4));

             

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return null;

    }

 

}

 

 

2.daoImpl层中使用框架特别简单,就几句话

(1)insert方法的实现

       public void insert() {

       String sql = "insert into users(name,password,email) values(?,?,?)";

       Object[] params = { "xxx", "111", "lkfjl@.com" };

       DBManager.udpate(sql, params);

    }

(2)delete方法的实现

    public void delete() {

       String sql = "delete from users where id=?";

       Object[] params = { 4 };

       DBManager.udpate(sql, params);

 

    }

(3)update方法的实现

    public void update() {

       String sql = "update users set name=?,password=? where id=?";

       Object[] params = { "sdgdd", "111", 5 };

       DBManager.udpate(sql, params);

    }

    (4)查询方法的实现 

//查询

    public void find() throws Exception{

       String sql="select * from users where id=?";

       Object[] params={5};

       //MyResultHandler rsh=new MyResultHandler();

       BeanResultHandler rsh=new BeanResultHandler(User.class );

      

       User user=(User) DBManager.find(sql, params, rsh);

       System.out.println(user.getId()+" "+user.getName());

    }

    //查询所有

    public List findAll() throws Exception{

       List list=null;

       String sql="select * from users";

       Object[] params={};

       BeanListHandler rsh=new BeanListHandler(User.class);

       list=(List) DBManager.find(sql, params, rsh);

       return list;

 

    }

3.建立一个类去测试

    UserDaoImpl obj = new UserDaoImpl();

    obj.insert();

 

原创粉丝点击