使用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放在項目的根目錄下.
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 自動生成 catch 塊
40
e.printStackTrace();
41
} catch (IOException e)
{
42
// TODO 自動生成 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數據庫
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()為數據庫服務器的IP
40
//sqlConfig.getDataBaseName()為數據庫名
41
//sqlConfig.getUser()為用戶名
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 自動生成 catch 塊
52
e.printStackTrace();
53
} catch (IllegalAccessException e)
{
54
// TODO 自動生成 catch 塊
55
e.printStackTrace();
56
} catch (ClassNotFoundException e)
{
57
// TODO 自動生成 catch 塊
58
e.printStackTrace();
59
} catch (SQLException e)
{
60
// TODO 自動生成 catch 塊
61
e.printStackTrace();
62
}
63
}
64
65
66
/** *//**
67
* 連接SQLServer數據庫,作為擴展
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
// 注意大小寫
79
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
80
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
81
82
//:5374為連接的端口號,通常為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 自動生成 catch 塊
100
e.printStackTrace();
101
} catch (SQLException e)
{
102
// TODO 自動生成 catch 塊
103
e.printStackTrace();
104
}
105
}
106
107
/** *//**
108
* 連接SQLServer數據庫,使用ODBC
109
*
110
*/
111
public void connectSQLServerODBC()
{
112
113
}
114
/** *//**
115
* 進行數據庫的查詢操作
116
* @param sql String sql為查詢的SQL語句
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 自動生成 catch 塊
126
e.printStackTrace();
127
return null;
128
}
129
130
}
131
132
133
/** *//**
134
* 進行數據庫的更新操作,只能執行一條更新指令
135
* @param sql String sql為更新的SQL語句
136
*/
137
public boolean sqlUpdate(String sql)
{
138
try
{
139
//手動提交
140
conn.setAutoCommit(false);
141
142
stmt = conn.createStatement();
143
stmt.executeUpdate(sql);
144
145
//沒有異常,表明更新成功
146
conn.commit();
147
System.out.println("更新成功!");
148
return true;
149
} catch (Exception ex)
{
150
System.out.println(ex.getStackTrace());
151
System.out.println("數據更新出現異常,自動恢復為更新前的數據");
152
153
try
{
154
//更新出現異常,數據回滾
155
conn.rollback();
156
System.out.println("自動恢復更新前的數據成功");
157
} catch (SQLException e)
{
158
// TODO 自動生成 catch 塊
159
e.printStackTrace();
160
System.out.println("自動恢復失敗,數據可能存在不一致,請手動恢復");
161
}
162
return false;
163
}
164
165
}
166
167
168
169
/** *//**
170
* 進行數據庫的更新操作,可執行多條更新指令
171
* @param sql String[] sql為更新的SQL語句集合
172
*/
173
public boolean sqlBatchUpdate(String[] sql)
{
174
try
{
175
//手動提交
176
conn.setAutoCommit(false);
177
stmt = conn.createStatement();
178
179
for(int i = 0; i< sql.length; i++)
180
stmt.addBatch(sql[i]);
181
//執行更新指令
182
stmt.executeBatch();
183
conn.commit();
184
185
return true;
186
} catch (SQLException ex)
{
187
System.out.println(ex.getStackTrace());
188
System.out.println("數據更新出現異常,自動恢復為更新前的數據");
189
190
try
{
191
//更新出現異常,數據回滾
192
conn.rollback();
193
System.out.println("自動恢復更新前的數據成功");
194
} catch (SQLException e)
{
195
// TODO 自動生成 catch 塊
196
e.printStackTrace();
197
System.out.println("自動恢復失敗,數據可能存在不一致,請手動恢復");
198
}
199
return false;
200
}
201
202
}
203
204
/** *//**
205
* 確認查詢是否有結果
206
* @param sql String
207
* @return boolean 查詢有結果,則返回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
* 獲取元數據信息(查詢結果的字段屬性)
229
* @return String 返回對元數據的描述,若不存在或出現異常返回""
230
*/
231
public String getMetaDataInfo()
{
232
try
{
233
if(rs != null)
{
234
ResultSetMetaData rsmd = rs.getMetaData();
235
String str = "選擇的數據共有" + rsmd.getColumnCount() + "個字段\n";
236
for (int i = 1; i <= rsmd.getColumnCount(); i++)
{
237
str += "第" + i + "個字段:" + rsmd.getColumnName(i) + " " +
238
rsmd.getColumnTypeName(i) + "( " +
239
rsmd.getColumnDisplaySize(i) + " )";
240
}
241
242
return str;
243
}
244
} catch (SQLException e)
{
245
// TODO 自動生成 catch 塊
246
e.printStackTrace();
247
}
248
249
return "";
250
}
251
252
253
/** *//**
254
* 獲取數據庫所有表的信息
255
* @return String 返回對數據庫元數據的描述,若不存在或出現異常返回""
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 = "數據庫共有" + rsmd.getColumnCount() + "個TABLE屬性字段";
266
for (int i = 1; i <= rsmd.getColumnCount(); i++)
{
267
str += "\n第" + i + "個屬性:" + rsmd.getColumnName(i);
268
}
269
270
return str;
271
}
272
} catch (SQLException e)
{
273
// TODO 自動生成 catch 塊
274
e.printStackTrace();
275
}
276
277
return "";
278
}
279
/** *//**
280
* 獲取某一字段的所有數據信息(該字段對應的每一行信息)
281
* i為RecordSet里面的序號
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 自動生成 catch 塊
301
e.printStackTrace();
302
}
303
//若出現異?;蛘遰ecordSet為空,返回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
* 斷開數據庫
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 自動生成 catch 塊
330
e.printStackTrace();
331
}
332
}
333
334
335
336
/** *//**
337
* @param args
338
*/
339
public static void main(String[] args)
{
340
// TODO 自動生成方法存根
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

在具體連接使用時可以出現以下問題:
1.







解決方案: 1) 注意 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")在大小寫
2) jdbc的驅動是否安裝, 三個jar包是否加個項目的libraries.
3意思就是說找不到驅動
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)連接里出錯. 看sqlserver里的端口號是不是一致.
2
