最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)

 更新時間:2017年08月05日 08:14:47   投稿:jingxian  
下面小編就為大家?guī)硪黄狫ava連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

運行環(huán)境:eclipse+MySQL

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

我在之前寫過一篇普通的Java連接MySQL數(shù)據(jù)庫,大家可以看看,以便對比參考之后就知道差距了 數(shù)據(jù)庫——MySQL——>Java篇

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

基本思想:

我們連接數(shù)據(jù)庫的時候,寫的方法都是要一個個類 的去寫,其中的方法不計其數(shù),連接數(shù)據(jù)庫都是需要:

Class.forName():加載驅(qū)動 ——》com.mysql.jdbc.Driver

DriverManager.getConnection():驅(qū)動管理,連接到數(shù)據(jù)庫 三個屬性1.數(shù)據(jù)庫地址 2.數(shù)據(jù)庫用戶名 3.密碼

createStatement():創(chuàng)建Statement對象

ResultSet:執(zhí)行sql語句獲得結(jié)果集,再遍歷

那么我們?yōu)榱四芡ㄓ?,那么其中的:?shù)據(jù)庫名,sql語句,遍歷結(jié)果集要得到的結(jié)果,都是要根據(jù)不同數(shù)據(jù)庫根據(jù)傳入?yún)?shù)不同而變化的

首先每個項目開始前都要將數(shù)據(jù)庫實體化,每個表都是一個實體類,表名是類名,字段為其屬性,再用set和get方法這些屬性

再根據(jù)反射機制,對象是我們表的實例化對象,根據(jù)我傳入方法的這個參數(shù)對象,獲取其中的方法,屬性,屬性值,類型等一系列的東西,來實現(xiàn)方法的封裝通用

代碼演示

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

public static List<Object> query(Class<?> obj) {
    Statement st=null;
    List<Object> list=new ArrayList<>();
    //數(shù)據(jù)庫MySQL的地址
        String DBURL="jdbc:mysql://localhost:3306/lms_leave?useUnicode=true&characterEncoding=utf-8"; 
        String DBName="root"; //登入用戶名
        String DBPwd="123456";//登入密碼
        //加載驅(qū)動
        try {
          Class.forName("com.mysql.jdbc.Driver");
        //連接數(shù)據(jù)庫
        Connection conn=DriverManager.getConnection(DBURL,DBName,DBPwd);
        //創(chuàng)建Statement對象
        st=conn.createStatement();
        ResultSet rs=st.executeQuery("select * from "+obj.getSimpleName());
        //獲取傳入類中的方法
        Method[] methods=obj.getMethods();
        //設(shè)置一個方法的list集合,下面將方法放入其中,以便調(diào)用
        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]);
          }
        }
        //創(chuàng)建字符串string集合,獲取下面的字段名存入
        List<String> fieldname=new ArrayList<>();
        //獲取類中的屬性,其屬性對應(yīng)數(shù)據(jù)庫中的字段
        Field[]  f=obj.getDeclaredFields();
        //循環(huán)將字段中的名字首個變大寫
        for (int i = 0; i < f.length; i++) {
          //獲取名字
          String field=f[i].getName();
          //變大小寫,存入fieldname集合
          fieldname.add(upperCase(field));
        }
        //獲取得到結(jié)果集(rs)的結(jié)構(gòu),比如字段數(shù)、字段名等。
        ResultSetMetaData rsmd=  rs.getMetaData();
        //循環(huán)讀取結(jié)果集中的數(shù)據(jù)添加到list集合中
        while (rs.next()) {
          //創(chuàng)建一個傳入類對象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去獲取數(shù)據(jù)庫中的字段名,rs.getObject,再根據(jù)獲取的這個字段名去得到這個字段值
                Object value=rs.getObject(rsmd.getColumnName(i+1));
                //獲取這個字段的類型,以便去儲存這個值的類型
                Class<?> type=f[i].getType();
                //是int類型的轉(zhuǎn)化
                if (type==int.class) {
                  value=new Integer(value.toString());
                }
                //string類型的轉(zhuǎn)化
                if (type==String.class) {
                  value=value.toString();
                }
                //m是user對象中的方法,設(shè)置其值
                m.invoke(user, value);
              }
            }
          }
          //將的到的user對象實例添加到list集合中
          list.add(user);
        }
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        return list;
  }

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

再給大家提示一下插入的方法封裝重要的一點是,獲取其中要插入的字段,根據(jù)插入語句拼接成一個完整的sql語句就可以完成

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

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

以上這篇Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • fastjson 使用方法詳細介紹

    fastjson 使用方法詳細介紹

    Fastjson是一個Java語言編寫的JSON處理器,由阿里巴巴公司開發(fā)。接下來通過本文給大家分享fastjson 使用方法詳細介紹,感興趣的朋友一起看看吧
    2017-11-11
  • Java中實現(xiàn)日志記錄的方案總結(jié)

    Java中實現(xiàn)日志記錄的方案總結(jié)

    在平時使用到一些軟件中,比如某寶或者某書,通過記錄用戶的行為來構(gòu)建和分析用戶的行為數(shù)據(jù),這就需要使用到日志系統(tǒng)來存儲或者記錄數(shù)據(jù),小編為大家整理了幾種Java日志方案,希望對大家有所幫助
    2024-12-12
  • 三步輕松實現(xiàn)Java的SM2前端加密后端解密

    三步輕松實現(xiàn)Java的SM2前端加密后端解密

    SM2算法和RSA算法都是公鑰密碼算法,SM2算法是一種更先進安全的算法,在我們國家商用密碼體系中被用來替換RSA算法,這篇文章主要給大家介紹了關(guān)于如何通過三步輕松實現(xiàn)Java的SM2前端加密后端解密的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java日常練習題,每天進步一點點(3)

    Java日常練習題,每天進步一點點(3)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • AJAX?SpringBoot?前后端數(shù)據(jù)交互的項目實現(xiàn)

    AJAX?SpringBoot?前后端數(shù)據(jù)交互的項目實現(xiàn)

    本文主要介紹了AJAX?SpringBoot?前后端數(shù)據(jù)交互的項目實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解SpringBoot之添加單元測試

    詳解SpringBoot之添加單元測試

    本篇文章主要介紹了詳解SpringBoot之添加單元測試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法

    java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法

    這篇文章主要為大家詳細介紹了java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Java從控制臺接受輸入字符的簡單方法

    Java從控制臺接受輸入字符的簡單方法

    這篇文章主要介紹了Java從控制臺接受輸入字符的簡單方法,需要的朋友可以參考下
    2014-02-02
  • RocketMQ特性Broker存儲事務(wù)消息實現(xiàn)

    RocketMQ特性Broker存儲事務(wù)消息實現(xiàn)

    這篇文章主要為大家介紹了RocketMQ特性Broker存儲事務(wù)消息實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 基于Java實現(xiàn)修改圖片分辨率示例代碼

    基于Java實現(xiàn)修改圖片分辨率示例代碼

    這篇文章主要介紹了一個可以修改圖片分辨率的java工具類,文中的示例代碼講解詳細,對學習JAVA有一定的幫助,感興趣的小伙伴快來跟隨小編一起學習吧
    2021-12-12

最新評論

崇文区| 沁水县| 南宁市| 秭归县| 晋江市| 博湖县| 蒲城县| 会昌县| 祁阳县| 锦屏县| 安图县| 洪泽县| 绍兴县| 淄博市| 静海县| 定兴县| 东明县| 富宁县| 余庆县| 张家界市| 饶阳县| 西平县| 太谷县| 苏尼特左旗| 洪江市| 宁安市| 务川| 榆树市| 托克逊县| 托克托县| 阿图什市| 中山市| 晋州市| 永福县| 鞍山市| 云龙县| 兰考县| 绥德县| 霍山县| 仲巴县| 龙游县|