使用JDBC連接SQLserver的代碼如下:
1
/** *//**
2
*
3
*/
4
package com.wekin.data;
5
6
import java.util.*;
7
import java.io.*;
8
9
/** *//**
10
* @author Administrator
11
*
12
*/
13
public class SQLConfig
{
14
private String hostIP = "";
15
private String dataBaseName = "";
16
private String user = "";
17
private String password = "";
18
19
public SQLConfig()
{
20
//config.properties放在項(xiàng)目的根目錄下.
21
Properties prop = this.loadProperty("./config.properties");
22
23
if(!prop.equals(null))
{
24
this.setHostIP(prop.getProperty("hostIP"));
25
this.setDataBaseName(prop.getProperty("dataBaseName"));
26
this.setUser(prop.getProperty("user"));
27
this.setPassword(prop.getProperty("password"));
28
}
29
}
30
31
private Properties loadProperty(String fileName)
{
32
try
{
33
Properties prop=new Properties();
34
FileInputStream in=new FileInputStream(fileName);
35
prop.load(in);
36
in.close();
37
return prop;
38
} catch (FileNotFoundException e)
{
39
// TODO 自動(dòng)生成 catch 塊
40
e.printStackTrace();
41
} catch (IOException e)
{
42
// TODO 自動(dòng)生成 catch 塊
43
e.printStackTrace();
44
}
45
46
return null;
47
}
48
49
public String getDataBaseName()
{
50
return dataBaseName;
51
}
52
public void setDataBaseName(String dataBaseName)
{
53
this.dataBaseName = dataBaseName;
54
}
55
public String getHostIP()
{
56
return hostIP;
57
}
58
public void setHostIP(String hostIP)
{
59
this.hostIP = hostIP;
60
}
61
public String getPassword()
{
62
return password;
63
}
64
public void setPassword(String password)
{
65
this.password = password;
66
}
67
public String getUser()
{
68
return user;
69
}
70
public void setUser(String user)
{
71
this.user = user;
72
}
73
}
74


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

SQLUtil.java
1
/**//*
2
* Created on 2007-04-20 9:19
3
*
4
*/
5
package com.wekin;
6
import java.sql.*;
7
import java.net.*;
8
import java.io.*;
9
import java.util.*;
10
import com.wekin.data.SQLConfig;
11
import com.microsoft.*;
12
/** *//**
13
* @author lixj
14
* Created on 2007-04-20 9:19
15
*/
16
public class SQLUtil
{
17
private Connection conn = null;
18
private ResultSet rs = null;
19
private Statement stmt = null;
20
21
private SQLConfig sqlConfig;
22
23
public SQLUtil()
{
24
sqlConfig = new SQLConfig();
25
}
26
27
/** *//**
28
* 連接MySQL數(shù)據(jù)庫(kù)
29
* @param hostIP String
30
* @param dataBaseName String
31
* @param user String
32
* @param password String
33
*
34
*/
35
public void connectMySQL()
{
36
try
{
37
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
38
39
//sqlConfig.getHostIP()為數(shù)據(jù)庫(kù)服務(wù)器的IP
40
//sqlConfig.getDataBaseName()為數(shù)據(jù)庫(kù)名
41
//sqlConfig.getUser()為用戶(hù)名
42
//sqlConfig.getPassword()為密碼
43
String url ="jdbc:mysql://" + sqlConfig.getHostIP() + "/" +
44
sqlConfig.getDataBaseName() + "?user=" +
45
sqlConfig.getUser() + "&password=" + sqlConfig.getPassword() +
46
"&useUnicode=true&characterEncoding=8859_1";
47
48
conn= DriverManager.getConnection(url);
49
System.out.println("連接成功!");
50
} catch (InstantiationException e)
{
51
// TODO 自動(dòng)生成 catch 塊
52
e.printStackTrace();
53
} catch (IllegalAccessException e)
{
54
// TODO 自動(dòng)生成 catch 塊
55
e.printStackTrace();
56
} catch (ClassNotFoundException e)
{
57
// TODO 自動(dòng)生成 catch 塊
58
e.printStackTrace();
59
} catch (SQLException e)
{
60
// TODO 自動(dòng)生成 catch 塊
61
e.printStackTrace();
62
}
63
}
64
65
66
/** *//**
67
* 連接SQLServer數(shù)據(jù)庫(kù),作為擴(kuò)展
68
* @param hostIP String
69
* @param dataBaseName String
70
* @param user String
71
* @param password String
72
*
73
*/
74
public void connectSQLServer()
{
75
76
try
{
77
//JDBC連接
78
// 注意大小寫(xiě)
79
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
80
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
81
82
//:5374為連接的端口號(hào),通常為1433.這里是5374.
83
String url = "jdbc:microsoft:sqlserver://"+ sqlConfig.getHostIP() +":5374;" +
84
"DatabaseName=" + sqlConfig.getDataBaseName();
85
86
87
System.out.println(sqlConfig.getHostIP());
88
System.out.println(sqlConfig.getUser());
89
System.out.println(sqlConfig.getPassword());
90
System.out.println(sqlConfig.getDataBaseName());
91
System.out.print(url);
92
conn = DriverManager.getConnection(url, sqlConfig.getUser(), sqlConfig.getPassword());
93
94
/**//*Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
95
String url = "jdbc:odbc:van";
96
conn = DriverManager.getConnection(url);*/
97
98
} catch (ClassNotFoundException e)
{
99
// TODO 自動(dòng)生成 catch 塊
100
e.printStackTrace();
101
} catch (SQLException e)
{
102
// TODO 自動(dòng)生成 catch 塊
103
e.printStackTrace();
104
}
105
}
106
107
/** *//**
108
* 連接SQLServer數(shù)據(jù)庫(kù),使用ODBC
109
*
110
*/
111
public void connectSQLServerODBC()
{
112
113
}
114
/** *//**
115
* 進(jìn)行數(shù)據(jù)庫(kù)的查詢(xún)操作
116
* @param sql String sql為查詢(xún)的SQL語(yǔ)句
117
*
118
*/
119
public ResultSet sqlQuery(String sql)
{
120
try
{
121
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
122
ResultSet.CONCUR_UPDATABLE);
123
return stmt.executeQuery(sql);
124
} catch (SQLException e)
{
125
// TODO 自動(dòng)生成 catch 塊
126
e.printStackTrace();
127
return null;
128
}
129
130
}
131
132
133
/** *//**
134
* 進(jìn)行數(shù)據(jù)庫(kù)的更新操作,只能執(zhí)行一條更新指令
135
* @param sql String sql為更新的SQL語(yǔ)句
136
*/
137
public boolean sqlUpdate(String sql)
{
138
try
{
139
//手動(dòng)提交
140
conn.setAutoCommit(false);
141
142
stmt = conn.createStatement();
143
stmt.executeUpdate(sql);
144
145
//沒(méi)有異常,表明更新成功
146
conn.commit();
147
System.out.println("更新成功!");
148
return true;
149
} catch (Exception ex)
{
150
System.out.println(ex.getStackTrace());
151
System.out.println("數(shù)據(jù)更新出現(xiàn)異常,自動(dòng)恢復(fù)為更新前的數(shù)據(jù)");
152
153
try
{
154
//更新出現(xiàn)異常,數(shù)據(jù)回滾
155
conn.rollback();
156
System.out.println("自動(dòng)恢復(fù)更新前的數(shù)據(jù)成功");
157
} catch (SQLException e)
{
158
// TODO 自動(dòng)生成 catch 塊
159
e.printStackTrace();
160
System.out.println("自動(dòng)恢復(fù)失敗,數(shù)據(jù)可能存在不一致,請(qǐng)手動(dòng)恢復(fù)");
161
}
162
return false;
163
}
164
165
}
166
167
168
169
/** *//**
170
* 進(jìn)行數(shù)據(jù)庫(kù)的更新操作,可執(zhí)行多條更新指令
171
* @param sql String[] sql為更新的SQL語(yǔ)句集合
172
*/
173
public boolean sqlBatchUpdate(String[] sql)
{
174
try
{
175
//手動(dòng)提交
176
conn.setAutoCommit(false);
177
stmt = conn.createStatement();
178
179
for(int i = 0; i< sql.length; i++)
180
stmt.addBatch(sql[i]);
181
//執(zhí)行更新指令
182
stmt.executeBatch();
183
conn.commit();
184
185
return true;
186
} catch (SQLException ex)
{
187
System.out.println(ex.getStackTrace());
188
System.out.println("數(shù)據(jù)更新出現(xiàn)異常,自動(dòng)恢復(fù)為更新前的數(shù)據(jù)");
189
190
try
{
191
//更新出現(xiàn)異常,數(shù)據(jù)回滾
192
conn.rollback();
193
System.out.println("自動(dòng)恢復(fù)更新前的數(shù)據(jù)成功");
194
} catch (SQLException e)
{
195
// TODO 自動(dòng)生成 catch 塊
196
e.printStackTrace();
197
System.out.println("自動(dòng)恢復(fù)失敗,數(shù)據(jù)可能存在不一致,請(qǐng)手動(dòng)恢復(fù)");
198
}
199
return false;
200
}
201
202
}
203
204
/** *//**
205
* 確認(rèn)查詢(xún)是否有結(jié)果
206
* @param sql String
207
* @return boolean 查詢(xún)有結(jié)果,則返回true,否則返回false
208
*/
209
public boolean dataExist(String sql)
{
210
try
{
211
sqlQuery(sql);
212
213
if (rs.first() == true)
{
214
return true;
215
} else
{
216
return false;
217
}
218
} catch (Exception ex)
{
219
System.out.println(ex.getStackTrace());
220
return false;
221
}
222
}
223
224
225
226
227
/** *//**
228
* 獲取元數(shù)據(jù)信息(查詢(xún)結(jié)果的字段屬性)
229
* @return String 返回對(duì)元數(shù)據(jù)的描述,若不存在或出現(xiàn)異常返回""
230
*/
231
public String getMetaDataInfo()
{
232
try
{
233
if(rs != null)
{
234
ResultSetMetaData rsmd = rs.getMetaData();
235
String str = "選擇的數(shù)據(jù)共有" + rsmd.getColumnCount() + "個(gè)字段\n";
236
for (int i = 1; i <= rsmd.getColumnCount(); i++)
{
237
str += "第" + i + "個(gè)字段:" + rsmd.getColumnName(i) + " " +
238
rsmd.getColumnTypeName(i) + "( " +
239
rsmd.getColumnDisplaySize(i) + " )";
240
}
241
242
return str;
243
}
244
} catch (SQLException e)
{
245
// TODO 自動(dòng)生成 catch 塊
246
e.printStackTrace();
247
}
248
249
return "";
250
}
251
252
253
/** *//**
254
* 獲取數(shù)據(jù)庫(kù)所有表的信息
255
* @return String 返回對(duì)數(shù)據(jù)庫(kù)元數(shù)據(jù)的描述,若不存在或出現(xiàn)異常返回""
256
*/
257
public String getDataBaseInfo()
{
258
try
{
259
if(conn != null)
{
260
DatabaseMetaData dbmd = conn.getMetaData();
261
ResultSet mrs = dbmd.getTables(null, null, null,
262
new String[]
{ "TABLE" });
263
ResultSetMetaData rsmd = mrs.getMetaData();
264
265
String str = "數(shù)據(jù)庫(kù)共有" + rsmd.getColumnCount() + "個(gè)TABLE屬性字段";
266
for (int i = 1; i <= rsmd.getColumnCount(); i++)
{
267
str += "\n第" + i + "個(gè)屬性:" + rsmd.getColumnName(i);
268
}
269
270
return str;
271
}
272
} catch (SQLException e)
{
273
// TODO 自動(dòng)生成 catch 塊
274
e.printStackTrace();
275
}
276
277
return "";
278
}
279
/** *//**
280
* 獲取某一字段的所有數(shù)據(jù)信息(該字段對(duì)應(yīng)的每一行信息)
281
* i為RecordSet里面的序號(hào)
282
* @param i int
283
* @return List
284
*/
285
public List getRecordInfo(int i)
{
286
287
try
{
288
if(rs != null)
{
289
List list = new ArrayList();
290
Object object = new Object();
291
292
while (rs.next())
{
293
object = rs.getObject(i);
294
list.add(object);
295
}
296
297
return list;
298
}
299
} catch (SQLException e)
{
300
// TODO 自動(dòng)生成 catch 塊
301
e.printStackTrace();
302
}
303
//若出現(xiàn)異常或者recordSet為空,返回null
304
return null;
305
}
306
307
308
// public ResultSet getResultSet(){
309
// return rs;
310
// }
311
// public Connection getConn(){
312
// return conn;
313
// }
314
315
316
/** *//**
317
* 斷開(kāi)數(shù)據(jù)庫(kù)
318
*
319
*/
320
public void disConnect()
{
321
try
{
322
if (rs != null)
323
rs.close();
324
if (stmt != null)
325
stmt.close();
326
if (conn != null)
327
conn.close();
328
} catch (SQLException e)
{
329
// TODO 自動(dòng)生成 catch 塊
330
e.printStackTrace();
331
}
332
}
333
334
335
336
/** *//**
337
* @param args
338
*/
339
public static void main(String[] args)
{
340
// TODO 自動(dòng)生成方法存根
341
SQLUtil sqlUtil = new SQLUtil();
342
// sqlUtil.connectMySQL();
343
sqlUtil.connectSQLServer();
344
// System.out.println(sqlUtil.getDataBaseInfo());
345
346
// System.out.println(sqlUtil.getMetaDataInfo());
347
348
try
{
349
ResultSet rs = sqlUtil.sqlQuery("SELECT * FROM FoodItem ");
350
String n_str =null;
351
while(rs.next())
{
352
n_str = rs.getString(1).toString().trim();
353
System.out.println(n_str);
354
355
}
356
}
357
catch(SQLException sqle)
{
358
359
}
360
sqlUtil.disConnect();
361
}
362
363
}
364


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

275

276

277

278

279


280

281

282

283

284

285



286

287



288



289

290

291

292



293

294

295

296

297

298

299



300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316


317

318

319

320



321



322

323

324

325

326

327

328



329

330

331

332

333

334

335

336


337

338

339



340

341

342

343

344

345

346

347

348



349

350

351



352

353

354

355

356

357



358

359

360

361

362

363

364

在具體連接使用時(shí)可以出現(xiàn)以下問(wèn)題:
1.







解決方案: 1) 注意 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")在大小寫(xiě)
2) jdbc的驅(qū)動(dòng)是否安裝, 三個(gè)jar包是否加個(gè)項(xiàng)目的libraries.
3意思就是說(shuō)找不到驅(qū)動(dòng)
2.
1
jdbc:microsoft:sqlserver://localhost:534;DatabaseName=sample_daojava.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
2
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
解決方案:1)連接里出錯(cuò). 看sqlserver里的端口號(hào)是不是一致.
2
