forked from laomafeima/WebJava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDB.java
More file actions
274 lines (242 loc) · 7.76 KB
/
DB.java
File metadata and controls
274 lines (242 loc) · 7.76 KB
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
package Web;
/**
* 数据库操作
* @author Ma
*/
import com.sun.org.apache.regexp.internal.REUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DB {
public static Connection Connection;
public static int lastUserTime;
public static void connection() {
if ((Options.DBDriver != null) && (Options.DBURL != null) && (Options.DBUser != null) && (Options.DBPassword != null)) {
String driver = Options.DBDriver; // 驱动程序名
String url = Options.DBURL; // URL指向要访问的数据库名
try {
Class.forName(driver); // 加载驱动程序
Connection conn = DriverManager.getConnection(url, Options.DBUser, Options.DBPassword); // 连续数据库
//验证是否连接成功
if (!conn.isClosed()) {
DB.Connection = conn;
DB.lastUserTime = (int) (System.currentTimeMillis() / 1000);
} else {
DB.Connection = null;
}
//DB.Connection.close();如果会自动处理就不用手动释放资源了
} catch (ClassNotFoundException ex) {
Logger.getLogger(Allocation.class.getName()).log(Level.SEVERE, null, ex);
System.exit(-1);
} catch (SQLException ex) {
Logger.getLogger(Allocation.class.getName()).log(Level.SEVERE, null, ex);
System.exit(-1);
} catch (Exception ex) {
Logger.getLogger(Allocation.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/**
* 用原生态的executeQuery 返回ResultSet
*
* @param sql
* @param params
* @return ResultSet
*/
public static ResultSet executeQuery(String sql, String... params) {
DB.cursor();
PreparedStatement statement;
try {
statement = DB.Connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
statement.setString((i + 1), params[i]);
}
ResultSet r = statement.executeQuery();
return r;
} catch (SQLException ex) {
Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
/**
* 用原生态的executeUpdate
*
* @param sql
* @param params
* @return
*/
public static int executeUpdate(String sql, String... params) {
DB.cursor();
try {
PreparedStatement statement = DB.Connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
statement.setString((i + 1), params[i]);
}
int r = statement.executeUpdate();
statement.close();
return r;
} catch (SQLException ex) {
Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
}
return 0;
}
/**
* 获取多个结果集
*
* @param sql
* @param params
*/
public static Object[][] get(String sql, String... params) {
DB.cursor();
Object[][] data = null;
try {
PreparedStatement statement = DB.Connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
statement.setString((i + 1), params[i]);
}
ResultSet r = statement.executeQuery();
//获取字段信息getMetaData
ResultSetMetaData columns = r.getMetaData();
int columnCount = columns.getColumnCount();
String[] columnName = new String[columnCount];
int[] columnTypeName = new int[columnCount];
for (int i = 1; i <= columnCount; i++) {
columnName[i - 1] = columns.getColumnName(i);
columnTypeName[i - 1] = DB.getTypeName(columns.getColumnType(i));
}
r.last();
int rowCount = r.getRow();
if (rowCount < 1) {
return new Object[rowCount][columnCount];
}
r.first();
data = new Object[rowCount][columnCount];
int i = 0;
do {
Object[] temp = new Object[columnCount];
for (int j = 0; j < columnName.length; j++) {
switch (columnTypeName[j]) {
case 0:
temp[j] = r.getBoolean(j + 1);
break;
case 1:
temp[j] = r.getInt(j + 1);
break;
default:
temp[j] = r.getString(j + 1);
break;
}
}
data[i] = temp;
i++;
} while (r.next());
//随手关闭
r.close();
statement.close();
return data;
} catch (SQLException ex) {
Logger.getLogger(Handler.class.getName()).log(Level.SEVERE, null, ex);
}
return data;
}
/**
* 获取一行
*
* @param sql
* @param params
* @return
*/
public static Object[] find(String sql, String... params) {
Object[][] r = DB.get(sql, params);
if (r.length < 1) {
return new Object[0];
}
return r[0];
}
/**
* 获取一个字段
*
* @param sql
* @param params
* @return
*/
public static Object getField(String sql, String... params) {
Object[][] r = DB.get(sql, params);
if (r.length < 1) {
return null;
} else {
return r[0][0];
}
}
/**
* 更新数据
*
* @param sql
* @param params
* @return
*/
public static int update(String sql, String... params) {
DB.cursor();
try {
PreparedStatement statement = DB.Connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
statement.setString((i + 1), params[i]);
}
//获取字段信息getMetaData
int r = statement.executeUpdate();
statement.close();
return r;
} catch (SQLException ex) {
Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
}
return 0;
}
public static int insert(String sql, String... params) {
return DB.update(sql, params);
}
public static int delete(String sql, String... params) {
return DB.update(sql, params);
}
/**
* 解析SQL便于开发
*
* @param sql
* @param params
* @return
*/
public static String getSQL(String sql, String... params) {
for (int i = 0; i < params.length; i++) {
sql = sql.replaceFirst("\\?", sql);
}
return sql;
}
public static int getTypeName(int typeId) {
switch (typeId) {
case Types.NUMERIC:
//Int 类型
return 1;
case Types.BOOLEAN:
//Boolean类型
return 0;
default:
//其余的当作String处理
return 2;
}
}
/**
* 检查链接时间是否过期
*/
public static void cursor() {
if ((DB.lastUserTime + Options.DBIdleTime) < System.currentTimeMillis()) {
DB.connection();
} else {
DB.lastUserTime = (int) System.currentTimeMillis() / 1000;
}
}
}