使用JDBC连接SQLserver的代码如下:
1/** *//**
2 *
3 */
4package com.wekin.data;
5
6import java.util.*;
7import java.io.*;
8
9/** *//**
10 * @author Administrator
11 *
12 */
13public 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 */
5package com.wekin;
6import java.sql.*;
7import java.net.*;
8import java.io.*;
9import java.util.*;
10import com.wekin.data.SQLConfig;
11import com.microsoft.*;
12/** *//**
13 * @author lixj
14 * Created on 2007-04-20 9:19
15 */
16public 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.
1jdbc: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里的端口号是不是一致.