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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - Java教程 - BaseJDBC和CRUDDAO的寫法實例代碼

BaseJDBC和CRUDDAO的寫法實例代碼

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

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

我們首先看下BASEJDBC的寫法實例:

?
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 {
 // 表示你要操作的是哪種類型的數據庫
 private final String DRIVER = "com.mysql.jdbc.Driver";
 // 表示你要連接的是哪一臺電腦的服務器端口號是多少數據庫的名字是什么
 private final String URL = "jdbc:mysql://localhost:3306/zzy";//有時這里需要加上字符集
 // 登錄數據庫的用戶名
 private final String USERNMAE = "root";
 // 登錄數據庫的密碼
 private final String PASSWORD = "root";
 /**
  * 注冊驅動 獲取連接
  *
  * @return
  */
 public Connection getConnection() {
  try {
   //Driver d=new Driver();
   // 注冊驅動:反射(是一項很高深的技術)
   Class.forName(DRIVER);
   // 由連接大管家創建連接對象
   return DriverManager.getConnection(URL, USERNMAE, PASSWORD);
  } catch (ClassNotFoundException e) {
   //e.printStackTrace("數據庫的驅動文件沒有找到");
  } catch (SQLException e) {
   //數據庫的連接錯誤
   e.printStackTrace();
  }
  return null;
 }
 /**
  * 關閉連接釋放資源
  * @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 寫法代碼實例:

?
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;
 }
 /**
  * 查詢操作要改造的地方 第一:參數必須抽象 第二:返回類型必須抽象
  *
  * @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("數據庫連接失敗");
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   super.closeAll(con, pt, rt);
  }
  return map;
 }
 /**
  * 將數據庫查詢到的數據進行封裝 封裝成實體類之后再返回給調用者
  *
  * @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 {
   // 創建反射類的實例
   t = c.newInstance();
   // 反射出所有字段
   Field[] field = c.getDeclaredFields();
   for (Field f : field) {
    // 根據反射的字段名得到數據庫中的字段值
    Object value = rt.getObject(f.getName());
    f.setAccessible(true);// 打開私有字段的操作權限
    f.set(t, value);// 調用這個字段的公有的set方法封裝字段的值
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 /**
  * 綁定參數
  *
  * @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();
  }
 }
 /**
  * 修改操作 進行的事務的控制 所有命令要么同時提交成功 要么同時回滾
  *
  * @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();
    // 關閉連接對象的自動提交的功能
    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("修改失敗,數據回滾!");
     }
     index++;
    }
   } else {
    System.out.println("數據庫連接失敗");
   }
  } catch (Exception e) {
   error++;
   e.printStackTrace();
  } finally {
   if (error > 0) {
    try {
     // 將前面已經執行的命令回滾
     con.rollback();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   } else {
    try {
     // 全部提交
     con.commit();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   super.closeAll(con, st, null);
  }
  return row;
 }
}

總結

以上就是本文關于BaseJDBC和CRUDDAO的寫法實例代碼的全部內容,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜福利在线观看6080 | re99热| 亚洲香蕉视频 | 美人老师沦为 | 五月天久久久 | 国产综合欧美日韩视频一区 | 高跟丝袜人妖sissy露出调教 | 日本暖暖在线 | 日本男男gayxxxxx免费 | 小草视频免费观看在线 | 日韩中文在线 | 免费在线看片网站 | 国内精品中文字幕 | re99| 色悠久久久久综合欧美99 | 99精品国产高清自在线看超 | 国产中文在线视频 | 性吟网 | 99热在线只有精品 | 成年私人影院免费视频网站 | 男神插曲女生动漫完整版动漫 | 欧美胖逼 | 国产黄频在线观看高清免费 | 猛男深夜狂cao小男生 | 国产在线观看网站 | 精品乱lun小说 | www亚洲国产 | 免费看片黄 | 国产高清好大好夹受不了了 | 日韩成a人片在线观看日本 日韩不卡一区二区 | 村上里沙40分钟在线观看 | 99精品视频免费观看 | 国产一区二区三区久久小说 | 调教女帝 | 免费久久久久 | 无人区尖叫之夜美女姐姐视频 | 亚洲a区视频 | 9420高清视频在线观看网百度 | 美女被爆 | 久久囯产精品777蜜桃传媒 | 99亚洲 |