java—將查詢的結果封裝成List與用回調函數實現數據的動態封裝(44)


 手工的開始QueryRunner類。實現數據封裝:

 MapListHandler

  MapHandler

  BeanListHandler

  BeanHandler

第一步:基本的封裝測試

       寫一個類,QueryRunner,實現一個方法query(sql)- List<map>

package cn.itcast.dbutils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
public class QueryRunner {
    //接收一個ds
    private DataSource ds;
    public QueryRunner() {
    }
    public QueryRunner(DataSource ds) {
        this.ds = ds;
    }
    /**
     * 只封裝成List<Map>
     */
    public List<Map<String,Object>> query(String sql){
        //封裝數據用
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();//聲明返回的對象
        Connection con = null;
        try{
            con = ds.getConnection();
            //執行查詢
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            //分析結果集
            ResultSetMetaData rsmd = rs.getMetaData();
            //獲取列數
            int cols = rsmd.getColumnCount(); 
            //遍歷數據
            while(rs.next()){
                //一行數據
                Map<String,Object> mm = new HashMap<String, Object>();
                //遍歷列
                for(int i=0;i<cols;i++){
                    //獲取列名
                    String colName = rsmd.getColumnName(i+1);
                    //獲取數據
                    Object val     = rs.getObject(i+1);
                    //封裝到map
                    mm.put(colName, val);
                }
                //將這個map放到list
                list.add(mm);
            }
            
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}

用回調函數實現數據的動態封裝

回調是指在執行時,具體的封裝處理工用由第三方的類來實現。

       回調一般由兩部分組成:

       1:調用類 - QueryRunner。實例類

       2:回調規范 – ResultSetHandler。一般是一個接口。

       3:回調規范定義回調方法且這個方法由調用類調用。

package cn.itcast.demo;

import java.util.ArrayList;

import java.util.List;

import org.junit.Test;

public class ThreadDemo {

    /**

     * 測試泛型

     * @throws Exception

     */

    @Test

    public void aa() throws Exception{

       //泛型,在運行時是沒有地。

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

       list.add("ddd");

       List list2 = list;

       list2.add(777);

       list.getClass().getMethod("add",Object.class).invoke(list,909);

       for(Object o:list){

           System.err.println(o+","+o.getClass());

       }

    }

    /**

     * 測試線程

     * @param args

     */

    public static void main(String[] args) {

       new Thread(

              new Runnable() {

                  public void run() {

                     System.err.println("B這是runnable.run。。。。");

                  }

              }

       ){

           public void run() {

              super.run();//調用父類的方法,以執行runnalble.run

              System.err.println("A這是thread.run....");

           };

       }.start();

    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM