国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

?
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ù)進行封裝 封裝成實體類之后再返回給調(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)建反射類的實例
   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)用這個字段的公有的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();
  }
 }
 /**
  * 修改操作 進行的事務的控制 所有命令要么同時提交成功 要么同時回滾
  *
  * @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)閉連接對象的自動提交的功能
    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的寫法實例代碼的全部內(nèi)容,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網(wǎng)站的支持!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久九九99 | 成年人免费在线看网站 | 骚视频网站 | 伊人久久艹 | 啪一啪操一操 | 欧美精品一区二区三区四区五区 | 成人影视免费 | 欧美亚洲高清 | 九色91九色porny永久 | 伊人精品在线 | www.99re| 亚洲一区二区三区久久久 | 毛片网站大全 | 日韩欧美h| 亚洲一区在线视频 | 伊人激情影院 | 二区在线观看 | 一区二区视频在线观看 | 国产一区免费视频 | av久久| 精品国产欧美 | 亚洲一一在线 | 亚洲精品一级 | 久久99精品国产自在现线 | 中文字幕av亚洲精品一部二部 | 91视频免费看| 日日久| 小川阿佐美88av在线播放 | 日韩91| 亚洲视频自拍 | 日本久久精品视频 | 欧美日韩国产影院 | 毛片在线视频 | 羞羞视频在线播放 | 日本一区二区三区视频免费看 | 青草免费视频 | 亚洲一区二区三区在线 | 躁躁躁日躁夜夜躁 | 久久这里有精品视频 | 欧美 日韩| 国产精品高潮呻吟久久av野狼 |