一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - BaseJDBC和CRUDDAO的寫法實(shí)例代碼

BaseJDBC和CRUDDAO的寫法實(shí)例代碼

2021-01-07 13:56周振宇 Java教程

這篇文章主要介紹了BaseJDBC和CRUDDAO的寫法實(shí)例代碼,代碼注釋十分詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。

我們首先看下BASEJDBC的寫法實(shí)例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
public class BaseJDBC {
 // 表示你要操作的是哪種類型的數(shù)據(jù)庫
 private final String DRIVER = "com.mysql.jdbc.Driver";
 // 表示你要連接的是哪一臺(tái)電腦的服務(wù)器端口號(hào)是多少數(shù)據(jù)庫的名字是什么
 private final String URL = "jdbc:mysql://localhost:3306/zzy";//有時(shí)這里需要加上字符集
 // 登錄數(shù)據(jù)庫的用戶名
 private final String USERNMAE = "root";
 // 登錄數(shù)據(jù)庫的密碼
 private final String PASSWORD = "root";
 /**
  * 注冊(cè)驅(qū)動(dòng) 獲取連接
  *
  * @return
  */
 public Connection getConnection() {
  try {
   //Driver d=new Driver();
   // 注冊(cè)驅(qū)動(dòng):反射(是一項(xiàng)很高深的技術(shù))
   Class.forName(DRIVER);
   // 由連接大管家創(chuàng)建連接對(duì)象
   return DriverManager.getConnection(URL, USERNMAE, PASSWORD);
  } catch (ClassNotFoundException e) {
   //e.printStackTrace("數(shù)據(jù)庫的驅(qū)動(dòng)文件沒有找到");
  } catch (SQLException e) {
   //數(shù)據(jù)庫的連接錯(cuò)誤
   e.printStackTrace();
  }
  return null;
 }
 /**
  * 關(guān)閉連接釋放資源
  * @param con
  * @param st
  * @param rt
  */
 public void closeAll(Connection con, Statement st, ResultSet rt) {
  try {
   if (rt != null) {
    rt.close();
    rt = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  try {
   if (st != null) {
    st.close();
    st = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  try {
   if (con != null) {
    con.close();
    con = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}

CRUDDAO 寫法代碼實(shí)例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
package com.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.*;
import java.util.Map.Entry;
/**
 *
 * @author zzy
 *
 * 2016年12月1日下午1:49:49
 */
public class CRUDDAO<T> extends BaseJDBC {
 private Connection con = null;
 private PreparedStatement pt = null;
 private Statement st = null;
 private ResultSet rt = null;
 private Class<T> c;
 public CRUDDAO() {
 }
 public CRUDDAO(Class<T> c) {
  this.c = c;
 }
 /**
  * 查詢操作要改造的地方 第一:參數(shù)必須抽象 第二:返回類型必須抽象
  *
  * @param <T>
  * @param <T>
  *
  * @return Map<Integer, List<T>>
  */
 public Map<Integer, List<T>> selectAll(Map<String, Object[]> m) {
  int index = 0;
  Map<Integer, List<T>> map = new LinkedHashMap<Integer, List<T>>();
  List<T> list = null;
  try {
   con = super.getConnection();
   if (con != null) {
    Set<Entry<String, Object[]>> set = m.entrySet();
    for (Entry<String, Object[]> entry : set) {
     list = new ArrayList<T>();
     pt = con.prepareStatement(entry.getKey());
     this.bind(entry.getValue());
     rt = pt.executeQuery();
     while (rt.next()) {
      list.add(this.toBean2());
     }
     map.put(++index, list);
    }
   } else {
    System.out.println("數(shù)據(jù)庫連接失敗");
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   super.closeAll(con, pt, rt);
  }
  return map;
 }
 /**
  * 將數(shù)據(jù)庫查詢到的數(shù)據(jù)進(jìn)行封裝 封裝成實(shí)體類之后再返回給調(diào)用者
  *
  * @return
  */
 private T toBean() {
  T t = null;
  try {
   t = c.newInstance();
   Method[] m = c.getMethods();
   ResultSetMetaData rmt = rt.getMetaData();
   for (int i = 1, count = rmt.getColumnCount(); i <= count; i++) {
    String columName = rmt.getColumnName(i);
    columName = "set" + columName.substring(0, 1).toUpperCase()
      + columName.substring(1);
    for (int j = 0; j < m.length; j++) {
     if (columName.equals(m[j].getName())) {
      m[j].invoke(t, rt.getObject(i));
      break;
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 private T toBean2() {
  T t = null;
  try {
   // 創(chuàng)建反射類的實(shí)例
   t = c.newInstance();
   // 反射出所有字段
   Field[] field = c.getDeclaredFields();
   for (Field f : field) {
    // 根據(jù)反射的字段名得到數(shù)據(jù)庫中的字段值
    Object value = rt.getObject(f.getName());
    f.setAccessible(true);// 打開私有字段的操作權(quán)限
    f.set(t, value);// 調(diào)用這個(gè)字段的公有的set方法封裝字段的值
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 /**
  * 綁定參數(shù)
  *
  * @param obj
  */
 private void bind(Object[] obj) {
  try {
   if (obj != null) {
    for (int i = 0, k = obj.length; i < k; i++) {
     pt.setObject(i + 1, obj[i]);
    }
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 /**
  * 修改操作 進(jìn)行的事務(wù)的控制 所有命令要么同時(shí)提交成功 要么同時(shí)回滾
  *
  * @param name
  * @param id
  * @return
  */
 public int[] updateAll(Map<String, Object[]> map) {
  int[] row = new int[map.size()];
  int index = 0;
  int error = 0;
  try {
   con = super.getConnection();
   if (con != null) {
    Set<Entry<String, Object[]>> set = map.entrySet();
    // 關(guān)閉連接對(duì)象的自動(dòng)提交的功能
    con.setAutoCommit(false);
    for (Entry<String, Object[]> entry : set) {
     pt = con.prepareStatement(entry.getKey());
     this.bind(entry.getValue());
     row[index] = pt.executeUpdate();
     if (row[index] == 0) {
      throw new Exception("修改失敗,數(shù)據(jù)回滾!");
     }
     index++;
    }
   } else {
    System.out.println("數(shù)據(jù)庫連接失敗");
   }
  } catch (Exception e) {
   error++;
   e.printStackTrace();
  } finally {
   if (error > 0) {
    try {
     // 將前面已經(jīng)執(zhí)行的命令回滾
     con.rollback();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   } else {
    try {
     // 全部提交
     con.commit();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   super.closeAll(con, st, null);
  }
  return row;
 }
}

總結(jié)

以上就是本文關(guān)于BaseJDBC和CRUDDAO的寫法實(shí)例代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:http://blog.csdn.net/fvdfsdafdsafs/article/details/53420589

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91夜色视频| 午夜国产精品视频 | 亚洲乱码一区二区三区国产精品 | 我要看靠逼片 | 涩涩漫画软件 | 国产亚洲视频网站 | 欧美多gayxxxx | 久久久久激情免费观看 | 欧美日韩视频一区三区二区 | 国产精品四虎在线观看免费 | 好 舒服 好 粗 好硬 好爽 | 久久婷婷五月综合色丁香花 | 精品国产欧美一区二区三区成人 | 久久se精品一区二区国产 | 国产欧美日韩不卡一区二区三区 | 青草视频久久 | 国产欧美日韩在线不卡第一页 | 成人影院入口 | 男女刺激高清视频在线观看 | 国内自拍成人网在线视频 | 欧美精品日韩一区二区三区 | 国产三级自拍视频 | poronovideos极度变态 | 亚洲国产自 | 日韩一区视频在线 | 国产成人99久久亚洲综合精品 | 色人阁导航 | 美女扒开胸罩露出奶了无遮挡免费 | 全肉np巨肉一女np高h双龙 | 好大好猛好爽好深视频免费 | 1024亚洲天堂| 精品无码国产污污污免费网站2 | 亚洲小视频网站 | 国产精品短视频 | 99久久一香蕉国产线看观看 | 国产精品视频在这里有精品 | 奇米影视一区 | 日韩ab | 俄罗斯三级在线观看级 | 99视频福利| 爱草影院 |