來(lái)源:二弎壽先生 發(fā)布時(shí)間:2018-11-21 14:04:49 閱讀量:1093
一、連接數(shù)據(jù)庫(kù)
a.獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng)
b.從配置文件db.properties中獲取mysql
db.properties配置文件
//mysql驅(qū)動(dòng)
driver:com.mysql.jdbc.Driver
//本機(jī)mysql的路徑
url:jdbc:mysql://localhost:3306/jdbcdemo
//用戶名
username:root
//密碼
password:123
1
2
3
4
5
6
7
8
二、構(gòu)建實(shí)體類(lèi)
類(lèi)名與數(shù)據(jù)庫(kù)表名一致,字段名與數(shù)據(jù)列名一致
package bean;
public class Users {
private String username;
private String password;
private String phone;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
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
三、dbUtils類(lèi) :進(jìn)行數(shù)據(jù)庫(kù)的相關(guān)操作
package utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
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.util.ArrayList;
import java.util.Properties;
import bean.Users;
/**
*
* <p>Title:DbUtil </p>
* <p>Description:數(shù)據(jù)庫(kù)工具類(lèi) </p>
* <p>Company: </p>
* @author 小桃小濤
* @date 2017年8月23日下午2:28:14
*/
public class DbUtil {
//1.獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng)
/**
* @description 獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng)
* @return
*/
public static Connection getConnection(){
Properties ps = new Properties();
Connection conn = null;
FileInputStream inputstream = null;
String driver;
String url;
String username;
String password;
try {
//從配置文件db.properties中獲取mysql配置
inputstream = new FileInputStream(new File("D:\\Java Example\\Jdbc\\src\\db.properties"));
ps.load(inputstream);
driver =ps.getProperty("driver");
url =ps.getProperty("url");
username =ps.getProperty("username");
password =ps.getProperty("password");
//System.out.println(driver+" "+url+" "+username+""+password);
//加載驅(qū)動(dòng)
Class.forName(driver);
conn = DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
//關(guān)閉流
if(inputstream!=null){
try {
inputstream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return conn;
}
//關(guān)閉資源 Object... 不定參數(shù)
public static void closeDb(Object... args){
if(args==null){
return;
}
try {
for (int i = 0; i < args.length; i++) {
//判斷是不是預(yù)處理方法
if(args[i] instanceof PreparedStatement
&&args[i]!=null){
((PreparedStatement)args[i]).close();
}
//判斷是不是連接
if(args[i] instanceof Connection
&&args[i]!=null){
((Connection)args[i]).close();
}
//判斷是不是結(jié)果集
if(args[i] instanceof ResultSet
&&args[i]!=null){
((ResultSet)args[i]).close();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* @Title: update
* @Description: TODO(更新數(shù)據(jù))
* @param @param sql語(yǔ)句
* @param @param args
* @param @return 設(shè)定文件
* @return int 返回類(lèi)型
* @throws
*/
public static int update(String sql,String... args){
int row=0;
//獲取驅(qū)動(dòng)
Connection connection = getConnection();
PreparedStatement ps =null;
try {
if(sql==null||sql.equals("")){
return row;
}else{
//sql語(yǔ)句預(yù)處理
ps =connection.prepareStatement(sql);
//賦值
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
row = ps.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
closeDb(ps,connection);
}
return row;
}
/**
*
* @Title: getResult
* @Description: TODO(查詢(xún)數(shù)據(jù))
* @param @param cls
* @param @param sql語(yǔ)句
* @param @param args
* @param @return 設(shè)定文件
* @return ArrayList<T> 返回類(lèi)型
* @throws
*/
public static <T>ArrayList<T> getResult(Class<T> cls,String sql,String... args){
ArrayList<T> list = new ArrayList<T>();
Connection connection = getConnection();
PreparedStatement ps = null;
ResultSet resultSet=null;
try {
if(sql==null||sql.equals("")){
return null;
}
ps =connection.prepareStatement(sql);
if(args!=null){
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
//執(zhí)行查詢(xún)方法
resultSet = ps.executeQuery();
//獲取結(jié)果集結(jié)構(gòu)
ResultSetMetaData metaData = resultSet.getMetaData();
//獲取列數(shù)
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
T t = (T)cls.newInstance();
for (int i = 0; i < columnCount; i++) {
Object val = resultSet.getObject(i+1);
String name =metaData.getColumnLabel(i+1);
Field Field = cls.getDeclaredField(name);
//暴力反射
if(!Modifier.isPublic(Field.getModifiers())){
Field.setAccessible(true);
Field.set(t,val);
}
}
list.add(t);
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} finally{
closeDb(ps,connection,resultSet);
}
return list;
}
public static void main(String[] args) {
/*String sql="UPDATE users SET username =? WHERE password=?";
int update = update(sql,"event","123","123456789");
int update = update(sql,"aaa","123");
System.out.println(update);*/
String sql="SELECT username,password,phone From users";
ArrayList<Users> result = getResult(Users.class,sql);
for (Users users : result) {
System.out.println(users.getUsername()+"\t"+users.getPassword()+"\t"+users.getPhone());
}
}
}
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
在上述對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的過(guò)程中,可以發(fā)現(xiàn)其共性部分,即通用的流程:
(1)創(chuàng)建Connection對(duì)象、SQL查詢(xún)命令字符串;
(2)對(duì)Connection對(duì)象傳入SQL查詢(xún)命令,獲得PreparedStatement對(duì)象;
(3)對(duì)PreparedStatement對(duì)象執(zhí)行executeUpdate()或executeQurey()獲得結(jié)果;
(4)先后關(guān)閉PreparedStatement對(duì)象和Connection對(duì)象。
可見(jiàn),使用JDBC時(shí),最常打交道的是Connection、PreparedStatement這兩個(gè)類(lèi),以及select中的ResultSet類(lèi)。
---------------------
在線
客服
服務(wù)時(shí)間:周一至周日 08:30-18:00
選擇下列產(chǎn)品馬上在線溝通:
客服
熱線
7*24小時(shí)客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信