使用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
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
//若出现异常或者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
* 断开数据库
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
在具体连接使用时可以出现以下问题:
1.
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLserverDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)




解决方案: 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里的端口号是不是一致.
