Java串連MySQL資料庫

來源:互聯網
上載者:User

標籤:too   local   表名   length   多重   stack   com   資料庫mysql   arraylist   

Java串連MySQL資料庫增刪改查通用方法  運行環境:eclipse+MySQL

  以前我們Java串連MySQL資料庫都是一個資料庫寫一個類,類下面寫好多方法,要是多個資料庫,就要寫多個類多個方法,導致代碼編寫太過於繁瑣,所以為了改變這樣的繁瑣,我將串連資料庫的方法進行了一系列的封裝,使使用者傳入一個對象值Object就可以得到想要的。

  我在之前寫過一篇普通的Java串連MySQL資料庫,大家可以看看,以便對比參考之後就知道差距了  資料庫——MySQL——>Java篇

  接下來我給大家講講如何將這個不可複用,又多重複的串連代碼,封裝起來,非常好用

基本思想:

我們串連資料庫的時候,寫的方法都是要一個個類 的去寫,其中的方法不計其數,串連資料庫都是需要:

  1. Class.forName():載入驅動   ——》com.mysql.jdbc.Driver
  2. DriverManager.getConnection():驅動管理,串連到資料庫 三個屬性1.資料庫地址  2.資料庫使用者名稱   3.密碼
  3. createStatement():建立Statement對象
  4. ResultSet:執行sql語句獲得結果集,再遍曆

那麼我們為了能通用,那麼其中的:資料庫名,sql語句,遍曆結果集要得到的結果,都是要根據不同資料庫根據傳入參數不同而變化的

首先每個項目開始前都要將資料庫實體化,每個表都是一個實體類,表名是類名,欄位為其屬性,再用set和get方法這些屬性

再根據反射機制,對象是我們表的執行個體化對象,根據我傳入方法的這個參數對象,擷取其中的方法,屬性,屬性值,類型等一系列的東西,來實現方法的封裝通用

代碼示範

先示範一個查詢:通過傳入這個表的實體類,通過一系列的放射機制,對比拼裝成一個查詢方法

public static List<Object> query(Class<?> obj) {        Statement  st=null;        List<Object> list=new ArrayList<>();        //資料庫MySQL的地址                String DBURL="jdbc:mysql://localhost:3306/lms_leave?useUnicode=true&characterEncoding=utf-8";                 String DBName="root"; //登入使用者名稱                String DBPwd="123456";//登入密碼                //載入驅動                try {                    Class.forName("com.mysql.jdbc.Driver");                //串連資料庫                Connection conn=DriverManager.getConnection(DBURL,DBName,DBPwd);                //建立Statement對象                st=conn.createStatement();                ResultSet rs=st.executeQuery("select * from "+obj.getSimpleName());                //擷取傳入類中的方法                Method[] methods=obj.getMethods();                //設定一個方法的list集合,下面將方法放入其中,以便調用                List<Method> list_m= new ArrayList<>();                //類中有許多方法,過濾一些方法,擷取自己想要的方法                for(int i=0;i<methods.length;i++){ //過濾方法                    //判斷方法名字中是否有set這個提取                    if (methods[i].getName().contains("set")) {                        //將方法添加到list中                        list_m.add(methods[i]);                    }                }                //建立字串string集合,擷取下面的欄位名存入                List<String> fieldname=new ArrayList<>();                //擷取類中的屬性,其屬性對應資料庫中的欄位                Field[]    f=obj.getDeclaredFields();                //迴圈將欄位中的名字首個變大寫                for (int i = 0; i < f.length; i++) {                    //擷取名字                    String field=f[i].getName();                    //變大小寫,存入fieldname集合                    fieldname.add(upperCase(field));                }                //擷取得到結果集(rs)的結構,比如欄位數、欄位名等。                ResultSetMetaData  rsmd=    rs.getMetaData();                //迴圈讀取結果集中的資料添加到list集合中                while (rs.next()) {                    //建立一個傳入類對象user                    Object user=obj.newInstance();                    //遍曆方法的集合                    for (Method m : list_m) {                        //遍曆欄位的集合                        for (int i = 0; i < f.length; i++) {                            //方法和欄位作比較,查看方法名中是否含有這個欄位名,兩者匹配                            if (m.getName().contains("set"+fieldname.get(i))) {                                //匹配成功 ,則去得到rsmd去擷取資料庫中的欄位名,rs.getObject,再根據擷取的這個欄位名去得到這個欄位值                                Object value=rs.getObject(rsmd.getColumnName(i+1));                                //擷取這個欄位的類型,以便去儲存這個值的類型                                Class<?> type=f[i].getType();                                //是int類型的轉化                                if (type==int.class) {                                    value=new Integer(value.toString());                                }                                //string類型的轉化                                if (type==String.class) {                                    value=value.toString();                                }                                //m是user對象中的方法,設定其值                                m.invoke(user, value);                            }                        }                    }                    //將的到的user對象執行個體添加到list集合中                    list.add(user);                }                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                return list;    }

大家可以參考這個方法完全可以改裝成剩餘的插入,修改,刪除

再給大家提示一下插入的方法封裝重要的一點是,擷取其中要插入的欄位,根據插入語句拼接成一個完整的sql語句就可以完成

//m.invoke(user);我的理解是運行user類下的方法m,得到傳回值Object object=m.invoke(user);

這些東西需要自己多去思考總結,希望對大家有用,我就不多寫了,留給大家一點思考的空間,需要剩下的方法封裝可以留言告訴我

 

Java串連MySQL資料庫

聯繫我們

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