運(yùn)行環(huán)境:eclipse+MySQL
創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、重慶APP開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營(yíng)銷(xiāo)能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門(mén)都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來(lái)大量新的創(chuàng)意。
以前我們Java連接MySQL數(shù)據(jù)庫(kù)都是一個(gè)數(shù)據(jù)庫(kù)寫(xiě)一個(gè)類(lèi),類(lèi)下面寫(xiě)好多方法,要是多個(gè)數(shù)據(jù)庫(kù),就要寫(xiě)多個(gè)類(lèi)多個(gè)方法,導(dǎo)致代碼編寫(xiě)太過(guò)于繁瑣,所以為了改變這樣的繁瑣,我將連接數(shù)據(jù)庫(kù)的方法進(jìn)行了一系列的封裝,使用戶傳入一個(gè)對(duì)象值Object就可以得到想要的。
我在之前寫(xiě)過(guò)一篇普通的Java連接MySQL數(shù)據(jù)庫(kù),大家可以看看,以便對(duì)比參考之后就知道差距了 數(shù)據(jù)庫(kù)——MySQL——>Java篇
接下來(lái)我給大家講講如何將這個(gè)不可復(fù)用,又多重復(fù)的連接代碼,封裝起來(lái),非常好用
基本思想:
我們連接數(shù)據(jù)庫(kù)的時(shí)候,寫(xiě)的方法都是要一個(gè)個(gè)類(lèi) 的去寫(xiě),其中的方法不計(jì)其數(shù),連接數(shù)據(jù)庫(kù)都是需要:
Class.forName():加載驅(qū)動(dòng) ——》com.mysql.jdbc.Driver
DriverManager.getConnection():驅(qū)動(dòng)管理,連接到數(shù)據(jù)庫(kù) 三個(gè)屬性1.數(shù)據(jù)庫(kù)地址 2.數(shù)據(jù)庫(kù)用戶名 3.密碼
createStatement():創(chuàng)建Statement對(duì)象
ResultSet:執(zhí)行sql語(yǔ)句獲得結(jié)果集,再遍歷
那么我們?yōu)榱四芡ㄓ?,那么其中的:?shù)據(jù)庫(kù)名,sql語(yǔ)句,遍歷結(jié)果集要得到的結(jié)果,都是要根據(jù)不同數(shù)據(jù)庫(kù)根據(jù)傳入?yún)?shù)不同而變化的
首先每個(gè)項(xiàng)目開(kāi)始前都要將數(shù)據(jù)庫(kù)實(shí)體化,每個(gè)表都是一個(gè)實(shí)體類(lèi),表名是類(lèi)名,字段為其屬性,再用set和get方法這些屬性
再根據(jù)反射機(jī)制,對(duì)象是我們表的實(shí)例化對(duì)象,根據(jù)我傳入方法的這個(gè)參數(shù)對(duì)象,獲取其中的方法,屬性,屬性值,類(lèi)型等一系列的東西,來(lái)實(shí)現(xiàn)方法的封裝通用
代碼演示
先演示一個(gè)查詢:通過(guò)傳入這個(gè)表的實(shí)體類(lèi),通過(guò)一系列的放射機(jī)制,對(duì)比拼裝成一個(gè)查詢方法
public static List<Object> query(Class<?> obj) { Statement st=null; List<Object> list=new ArrayList<>(); //數(shù)據(jù)庫(kù)MySQL的地址 String DBURL="jdbc:mysql://localhost:3306/lms_leave?useUnicode=true&characterEncoding=utf-8"; String DBName="root"; //登入用戶名 String DBPwd="123456";//登入密碼 //加載驅(qū)動(dòng) try { Class.forName("com.mysql.jdbc.Driver"); //連接數(shù)據(jù)庫(kù) Connection conn=DriverManager.getConnection(DBURL,DBName,DBPwd); //創(chuàng)建Statement對(duì)象 st=conn.createStatement(); ResultSet rs=st.executeQuery("select * from "+obj.getSimpleName()); //獲取傳入類(lèi)中的方法 Method[] methods=obj.getMethods(); //設(shè)置一個(gè)方法的list集合,下面將方法放入其中,以便調(diào)用 List<Method> list_m= new ArrayList<>(); //類(lèi)中有許多方法,過(guò)濾一些方法,獲取自己想要的方法 for(int i=0;i<methods.length;i++){ //過(guò)濾方法 //判斷方法名字中是否有set這個(gè)提取 if (methods[i].getName().contains("set")) { //將方法添加到list中 list_m.add(methods[i]); } } //創(chuàng)建字符串string集合,獲取下面的字段名存入 List<String> fieldname=new ArrayList<>(); //獲取類(lèi)中的屬性,其屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)中的字段 Field[] f=obj.getDeclaredFields(); //循環(huán)將字段中的名字首個(gè)變大寫(xiě) for (int i = 0; i < f.length; i++) { //獲取名字 String field=f[i].getName(); //變大小寫(xiě),存入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)建一個(gè)傳入類(lèi)對(duì)象user Object user=obj.newInstance(); //遍歷方法的集合 for (Method m : list_m) { //遍歷字段的集合 for (int i = 0; i < f.length; i++) { //方法和字段作比較,查看方法名中是否含有這個(gè)字段名,兩者匹配 if (m.getName().contains("set"+fieldname.get(i))) { //匹配成功 ,則去得到rsmd去獲取數(shù)據(jù)庫(kù)中的字段名,rs.getObject,再根據(jù)獲取的這個(gè)字段名去得到這個(gè)字段值 Object value=rs.getObject(rsmd.getColumnName(i+1)); //獲取這個(gè)字段的類(lèi)型,以便去儲(chǔ)存這個(gè)值的類(lèi)型 Class<?> type=f[i].getType(); //是int類(lèi)型的轉(zhuǎn)化 if (type==int.class) { value=new Integer(value.toString()); } //string類(lèi)型的轉(zhuǎn)化 if (type==String.class) { value=value.toString(); } //m是user對(duì)象中的方法,設(shè)置其值 m.invoke(user, value); } } } //將的到的user對(duì)象實(shí)例添加到list集合中 list.add(user); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; }
大家可以參考這個(gè)方法完全可以改裝成剩余的插入,修改,刪除
再給大家提示一下插入的方法封裝重要的一點(diǎn)是,獲取其中要插入的字段,根據(jù)插入語(yǔ)句拼接成一個(gè)完整的sql語(yǔ)句就可以完成
//m.invoke(user);我的理解是運(yùn)行user類(lèi)下的方法m,得到返回值 Object object=m.invoke(user);
這些東西需要自己多去思考總結(jié),希望對(duì)大家有用,我就不多寫(xiě)了,留給大家一點(diǎn)思考的空間,需要剩下的方法封裝可以留言告訴我
以上這篇Java連接MySQL數(shù)據(jù)庫(kù)增刪改查的通用方法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。
文章名稱:Java連接MySQL數(shù)據(jù)庫(kù)增刪改查的通用方法(推薦)
網(wǎng)頁(yè)URL:http://jinyejixie.com/article44/peoiee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、網(wǎng)站維護(hù)、云服務(wù)器、App設(shè)計(jì)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)