Mysql通用查詢操作類(Jsp+servlet+javaBean+Mysql)

來源:互聯網
上載者:User

在騰科培訓了有1個半月了,終於學完JSP+SERVLET+JAVABEAN+MYSQL,學了java的第一套web解決方案。老師要求我們6人一組開始做一個訂餐系統。這個系統沒有什麼特別的,就跟電子商城是一個樣的。由於要對資料庫做大量的增刪改查,那個代碼又多,我想能不能將資料庫操作的這一層打包起來(SqlOperDao),讓我對資料庫操作,用幾行代碼就搞定的。然後我只修改sql語句,和傳進來的參數就可以了。

 

增刪改屬於一類操作,都是不返回結果集的,而尋找是要返回結果集的

1)先說增刪改的操作

public int buildConn(String sql)throws Exception{
  Connection conn=null;
  Statement stmt=null;
   int result=0;
  boolean flag;
   try{
   conn=sqlconn.conn();
   stmt=conn.createStatement();
      result=stmt.executeUpdate(sql);
   System.out.println("恭喜你執行成功"+result+"條記錄!");
   flag=true;
  }catch(Exception e){
   System.out.println("抱歉!執行失敗!"+e.getMessage());
   flag=false;
  }finally{
   
   stmt.close();
   conn.close();
  }
  return result;
 }

2)而對於查詢操作的就比較麻煩一點,通常我們都將查詢的結果集打包到一個javabean組合中,例如我有一個登陸的javabean裡面只有name和password,對應的表中user_list的兩列name,password.現在要將user_list中的所有資料讀出來,讀出一條,就放到一個javabean中,多條資料就放到List<javabean>中。首先我們可以講資料庫中的所有資料都用讀取字串的形式getString的方法讀出來,當然如果資料庫中表的列的屬性不是varchar類型,就不可以用此類方法。

本通用查詢只針對都是String類型的表。

 /**
  * 通用查詢,傳入要查詢的sql語句
  * 返回一個List<String[]>
  */
 public List<String[]> query(String sql) throws Exception{
  this.queryList=new ArrayList<String[]>();
  Statement stmt = null;
  ResultSet rs = null;
     Connection conn=null;
     conn=this.sqlconn.conn();
  stmt = conn.createStatement();
  rs = stmt.executeQuery(sql);
  ResultSetMetaData rsmd = rs.getMetaData();
  int columnCount = rsmd.getColumnCount();
     //2、取得表體資訊,要對錶體進行判斷是否存在,如果不存在則退出
  while(true){
   if(false == rs.next()){
    break;
   }
   String dataList[] = new String[columnCount];
   for(int body = 1; body <= columnCount; body ++){
    String columnValue = rs.getString(body);
    dataList[body - 1] = columnValue;
    }
      this.queryList.add(dataList);
   }
  rs.close();
  stmt.close();
  conn.close();
     return queryList;
 }

這個方法是將表中的內容讀取出來,然後存放到一個List<String[]>中,但這樣有個壞處,就是讀出來的資料還沒有打包成javabean,要自己打包,很是繁瑣。所以在這個方法的基礎上,我再寫了一個將List<String[]>打包成javabean的方法。在這裡要注意一點,就是,這個資料庫通用操作類必須是一個泛型,class SqlOperDao<T>,要不然,Object類型是無法轉化為你想要的javabean類型

/**
  * 傳入一個javabean,sql查詢語句
  * 查詢返回的結果集,放到一個集合中List<javaBean>
  * 這是一個賦值的操作,只對String類型進行複製,如果javabean中的set方法不是傳String類型的
  * 可以改寫為
  * public void setAttribute(String str){
  *    this.attribute=Integer.parseInt(str);
  *   }
  * T可以傳入一個JavaBean
  */
 public List<Object> query(Object t,String sql)throws Exception{
     List<Object> resultlist=new ArrayList<Object>();
     Class cl=t.getClass();
     Class mycl=Class.forName(cl.getName());
     Field[] fields=mycl.getDeclaredFields();
     List<String[]> querylist=this.query(sql);     
     for(String[] results:queryList){
       Object instance=mycl.newInstance();
        int i=0;
       for(Field field:fields){

         //採用java反射機制,擷取javabean中set方法的方法名稱,由於set方法都是由set+屬性名稱(String)構成的,所以用拼湊字串
         String setMethod="set"+String.valueOf(field.getName().charAt(0)).toUpperCase()+""+field.getName().substring(1);
         Method set=mycl.getMethod(setMethod,String.class);
         set.invoke(instance,results[i]);     
         i++;
        }
       resultlist.add(instance);
     }
    return resultlist;
 } 

 

在此通用資料查詢就完成了,再來,看下如何使用?

javabean:   class UserList{  private String name;

                                            private String password;  //get和set方法由myeclipse自動產生}

Dao層:要讀取資料庫中user_list中的所有資料

public static void main(String[] args0) throws Exception{

     SqlOperDao sod=new SqlOperDao();
     UserList  t=new UserList();
     String sql="SELECT * FROM user_list";
     List<UserList> list=sod.query(t, sql);
  for(Eatery e:list){
   System.out.println(e.getEateryName());
  }

//這樣三句話就可以寫完一個資料庫的查詢操作了,這樣我們寫出來的Dao層要比其他人的代碼要少70%

 

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.