對尋找進行最佳化執行個體代碼:

來源:互聯網
上載者:User

對尋找進行最佳化執行個體代碼:

DBManager部分:

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

       //怎樣對結果集進行相應的處理————用到反射和中繼資料對象

       Connection con=null;

       PreparedStatement st=null;

       ResultSet rs=null;

       con=DBManager.getConnection();

       try {

           st=con.prepareStatement(sql);

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

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

           }

           rs=st.executeQuery();

           //對結果集的處理

           //調用程式員傳過來的對結果集進行處理的方法即可(UserDaoImpl)

           return rsh.handler(rs); 

          

       } finally{

           DBManager.release(con, st, rs);

       }

    }

UserDaoImpl部分

//(1)尋找一個

    public void find() throws SQLException{

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

       Object[] params={2};

       //實行查詢

       BeanHandler rsh=new BeanHandler(User.class);

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

       System.out.println(user.toString());

    }

//作為架構的開發人員,構建結果集的處理器,將結果集中的第一行記錄封裝在一個javabean對象中

public class BeanHandler implements ResultSetHandler {

    //傳遞javabean類所對應的class對象

    private Class clazz;//代表某種類型

    public BeanHandler(Class clazz){

       this.clazz=clazz;

    }

    @Override

    public Object handler(ResultSet rs) {

       // TODO Auto-generatedmethod stub

       try {

           if(!rs.next()){

              return null;

           }

           //讀取結果集中的各個列封裝到javabean

           Object bean=clazz.newInstance();//建立指定的javabean對象

           //讀取結果集

           ResultSetMetaData meta=rs.getMetaData();//結果集中有幾行幾列,每列的類型,結果集的中繼資料對象

           int count = meta.getColumnCount();//得到列數

           for(int i=1;i<=count;i++){

              //把結果集中的列讀取出來設定到bean對象上

             

              String coumnName=meta.getColumnName(i);//得到第i列的列名

              Object value=rs.getObject(coumnName);//從結果集中讀取到了指定列的值

              //調用set方法設定屬性

              //通過反射機製得到bean對象中的某一個屬性所對應的Field對象

              Field f=bean.getClass().getDeclaredField(coumnName);//得到bean所對應的class類型

              f.setAccessible(true);

              f.set(bean, value);

          

           }

           return bean;

       } catch (Exception e) {

           // TODO Auto-generatedcatch block

           throw new RuntimeException(e);//運行時異常

       }

    }

}

//(2)尋找全部

    public List findAll() throws SQLException{

       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;

    }

//用來得到查詢多行多列

public class BeanListHandler implements ResultSetHandler {

    private Class clazz;//代表某種類型

    public BeanListHandler(Class clazz){

       this.clazz=clazz;

    }

    @Override

    public Object handler(ResultSet rs) {

       try{

           List list=new ArrayList();

           while(rs.next()){

              //迴圈的讀取一行,把這一行設定到bean 對象中,再把該bean 對象加入到list集合裡面去

              Object bean=clazz.newInstance();//建立bean對象

              ResultSetMetaData meta=rs.getMetaData();//得到結果集中繼資料

              int count=meta.getColumnCount();//得到總列數

              for(int i=1;i<=count;i++){

                  String columnName=meta.getColumnName(i);

                  Object value=rs.getObject(columnName);

                 

                  Field f=clazz.getDeclaredField(columnName);

                  f.setAccessible(true);

                  f.set(bean, value);

              }

              //將bean 對象加入到list集合中

              list.add(bean);

           }

           return list;

       }catch(Exception e){

           throw new RuntimeException(e);

       }

    }

}

 

public interface ResultSetHandler {

//結果集處理器介面

    //規定一個方法,讓程式員按照規定的方法寫

    public Object handler(ResultSet rs);

   

}

MyResultSetHandler部分

public class MyResultSetHandler implements ResultSetHandler {

    @Override

    public Object handler(ResultSet rs) {

       // TODO Auto-generatedmethod stub

       User user=new User();

       try {

           if(rs.next()){

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

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

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

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

             

           }

       } catch (SQLException e) {

           // TODO Auto-generatedcatch block

           e.printStackTrace();

       }

       return user; 

    }

}

User.java部分:

public class User {

    private int id;

    private String name;

    private String password;

    private String email;

    private Date birthday;

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

    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;

    }

    @Override

    public String toString() {

       return "User[id=" + id + ", "

              + (name != null ? "name=" + name + ", " : "")

              + (password != null ? "password=" + password + ", " : "")

              + (email != null ? "email=" + email + ", " : "")

              + (birthday != null ? "birthday=" + birthday : "") + "]";

    }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.