jiqinglxj

BlogJava 首页 新随笔 联系 聚合 管理
  2 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

使用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(nullnullnull,
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里的端口号是不是一致.

 

 

  
 

 

 


 


 


 

 

posted on 2007-04-20 09:45 lixiaoji 阅读(583) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: