JAVABEAN的封装--回调技术

来源:互联网 发布:淘宝视频服务不能订购 编辑:程序博客网 时间:2024/06/07 00:10

 大家都知道,J2EE设计编码时,少不了数据库的操作,而且数据库中的数据要封装成JAVABEAN更是少不了的,下面我介绍一种使用动态继承的方法封装JAVABEAN,也就是回调技术,先看下面的代码:

package jk.util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


 public class DBUtils {

  private static DataSource dataSource;
  
  static{ 
   try {
    Context context =new InitialContext();
    dataSource = (DataSource)context.lookup("mytestdb");//使用数据源
   } catch (NamingException e) {
    e.printStackTrace();
   }
  }
  
  
  private Connection con ;
  
  public DBUtils()  {
   
   if(dataSource!=null){ 
    try {
     con = dataSource.getConnection();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    
    return;
   }
   
  }
  
  
  public void excuteSql(String sql) throws SQLException{//无返回值,执行数据库操作
   Statement st =null;
   try {
    st = con.createStatement();
    st.execute(sql);
   } catch (SQLException e) {
    throw e;
   }finally{
    if(st!=null){
     try {
      st.close();
     } catch (SQLException e) { 
      e.printStackTrace();
     }
    }
   }
  }
  
  public void excuteSqlWithResult(String select) throws SQLException{//需要封装JAVABEAN的操作
   
   
   Statement st =null;
   ResultSet rst =null;
   try {
    st = con.createStatement();
    rst = st.executeQuery(select);
    
    mapResultSet(rst);//需要动态继承的方法,目的是在关闭结果集之前使用结果集
   } catch (SQLException e) {
    throw e;
   }finally{
    if(rst!=null){
     rst.close();
    }
    
    if(st!=null){
     try {
      st.close();
     } catch (SQLException e) { 
      e.printStackTrace();
     }
    }
   }
  }
  
  
  public void mapResultSet(ResultSet rst) throws SQLException{//需要动态继承的方法  
   
  }
  
  public void free(){
   if(con!=null){
    try {
     con.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   
  }
 /**
  * @param args
  */
 

}
上面的类是要获得数据库连接并执行数据库操作,下面封装JAVABEAN

ackage jk.model.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import jk.model.vo.Userinfo;
import jk.util.DBUtils;

public class Userdao {
public List<Userinfo> getalluser()
{
 final List<Userinfo> userlist=new ArrayList<Userinfo>();
 DBUtils db=new DBUtils(){

  @Override
  public void mapResultSet(ResultSet rst) throws SQLException {//动态继承,覆盖父类的方法
   // TODO Auto-generated method stub
   Userinfo user=new Userinfo();
   user.setUuid(rst.getInt(1));
   user.setUsername(rst.getString(2));
   user.setPassword(rst.getString(3));
   userlist.add(user);
  }
  };
 try {
  db.excuteSqlWithResult("select * from User_info");
 } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return userlist;
 
}
}
以上的代码,大家看了之后,可能感觉到在DAO包中封装已经是很方便了,其原理就是覆盖掉父类中的方法,但程序执行到此方法是会走子类方法

原创粉丝点击