程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> jdbc連接SQL Server數據庫的注意事項及編程應用實例

jdbc連接SQL Server數據庫的注意事項及編程應用實例

編輯:關於JAVA

首先,關於數據庫的安裝方法在本文中就不再累贅,詳情請見我的上一篇博客。

http://cq520.iteye.com/admin/blogs/1982097

不過需要注意的是,由於裝有Windows操作系統下的電腦都默認有SQL Server,所以大家可以打開自己 的電腦看一下自己的電腦裡面是哪個SQL Server 版本(在開始菜單中找到Microsoft SQL Server文件夾 ,後面的版本號就是本機的SQL Server 版本)。

不過系統自帶的SQL Server可能並沒有管理工具(SQL Server Management Studio,如本人的電腦) ,就可以在百度下載,要記得添加上自己的版本號哦,如SQL Server Management Studio 2005.

下面進入主題,如何使用JDBC連接SQL Server數據庫:(以2005版本為例)

1. 關閉防火牆。防火牆設置會導致你無法連接到本地的數據庫,至少這是出於安全的考慮。

2. 配置TCP端口:

a. 開始->所有程序->Microsoft SQL Server 2005->配置工具- >SQL Server配置管理器->SQL Server 2005 網絡配置->MSSQLSERVER協議

b. 啟用 “TCP/IP”(右鍵單擊選擇“啟動”)[http://www.colalife.com]

c. 雙擊 “TCP/IP”->“IP 地址”->“IPAll”->“TCP 端口 ”項添加默認的“1433”端口

3. 外圍應用配置:Microsoft SQL Server 2005->配置工具->SQL Server外圍應用配置器-> 服務和連接的外圍應用配置器->

①選SQLEXPRESS->Database Engine->遠程連接->本地 連接和遠程連接->同時使用TCP/IP和named pipes

②選SQL Server Browser->服務->啟動類 型改為“自動”->應用->啟動->確定

4. 修改默認的登錄驗證模式(如果在安裝過程中是默認按“Windows 身份驗證模式”方式 安裝,所以sa登錄是被禁用的,即使將身份驗證模式更改為“SQL Server 和 Windows 身份驗證模 式”,sa登錄仍處於禁用狀態,所以需要啟用sa登錄帳戶):

①在SQL Server Management Studio 的對象資源管理器中,安全性->登錄名->右擊“sa”->屬性->

常規->將登錄名sa的密碼和確認密碼設為強密碼->狀態->登錄->啟用->確定

②在 SQL Server Management Studio 的對象資源管理器中,右擊服務器->屬性->安全性->服務器身 份驗證->選擇“SQL Server和Windows身份驗證模式”->確定->確定

5. 在SQL Server Management Studio中新建一個數據庫(例如“mytest”,如果測試程序 帶有數據庫文件也可不用新建而直接附加到當前SQL Server數據庫服務器);在SQL Server Management Studio 的對象資源管理器中右擊服務器->重新啟動->是

6. 運行下載的JDBC文件“sqljdbc_1.2.2828.100_chs.exe”,(已在附件中給大家配上), 解壓到“C:\Program Files”文件夾中;[http://www.colalife.com]

將Classpath設置為包含sqljdbc.jar文件(也可加到系統環境變量中),建議從解壓文件夾下找到 sqljdbc.jar,將其復制到自己常用的Jar文件夾裡,用的時候方便找到。

7. 在Eclipse3.2 / 3.3 或 MyEclipse6.0 / 6.5 中進行JDBC連接設置並測試

1、打開Eclipse3.2 / 3.3 或 MyEclipse6.0 / 6.5,新建Java Project”,項目名為Test

2、選擇 “Window”→“Preferences”→“Java”→“Inst alled JREs”,選定已安裝的 JRE,點擊“Edit...”→“Add External JARs”,找到sqljdbc.jar並添加—>OK

3、"Window"->"Open Perspective"->"MyEclipse Database Explorer"->(左側)"DB Browser"右鍵“New”->填寫鏈接屬性Driver name,URL為:jdbc:sqlserver:// localhost:1433;databaseName=mytest,User name:sa,Password:密碼。然後在Driver JARs 點Add JARs 添加sqljdbc.jar,點及Test

Driver測試,勾上Save Password保存密碼,點擊完成結束——即完成了在DB Browser中連 接數據庫配置。

到上面一步為止,我們的配置工作就已經基本完成了,接下來就是一個數據庫編程的具體實例。需要 注意的是,就像我上面所提到的,要進行數據庫編程,至少得有個數據庫吧(巧婦難為無米之炊),還要 會一些基本的數據庫操作,這些對於學過數據庫課程的你應該沒有問題,如果你沒學過數據庫課程,也沒 關系,你可以花時間看看數據庫的一些簡單操作,這些在相關課本上很容易找到。

廢話不多說,代碼如下:

Java代碼

package DBManager;  
      
import java.sql.Connection;  
import java.sql.DriverManager;  
      
import INFO.Info;  
      
/** 
 * 數據庫連接類 
 * @author Administrator 
 * 
 */
public class DBConnection {  
    //加載並連接本地的SQLServer  
    String driveName="com.microsoft.sqlserver.jdbc.SQLServerDriver";  
    String url="jdbc:sqlserver://localhost:1433;DatabaseName=cqTalk";  
          
    String userName="sa";  
    String pwd="xiaoyan710";  
          
    /** 
     * 創建時加載驅動 
     */
    public DBConnection(){  
        try{  
            Class.forName(driveName);  
        }catch(Exception e){  
            Info.error("驅動加載失敗");  
        }  
    }  
          
    public Connection getConnection(){  
        Connection con=null;  
        try{  
            con=DriverManager.getConnection(url,userName,pwd);  
            Info.log("數據庫連接成功");  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
        return con;  
    }  
          
}

Java代碼

package User;  
      
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
      
import DBManager.DBConnection;  
import INFO.Info;  
      
/** 
 * 對用戶數據的操作 
 * @author cq 
 * 
 */
public class UserDao {  
      
    DBConnection dbCon=null;  
    Connection connection=null;  
          
    PreparedStatement state=null;//預編譯的sql語句對象  
    String sql=null;//sql語句  
          
    /** 
     * 創建用戶操作類時加載驅動 
     */
    public UserDao(){  
        dbCon=new DBConnection();  
    }  
          
    /** 
     * 添加新用戶的方法 
     * @param user 
     */
    public void add(User user){  
              
        connection=dbCon.getConnection();  
        sql="insert into userData values(?,?,?,?,?)";  
        try{  
            state=connection.prepareStatement(sql);  
            state.setString(1, user.getID());  
            state.setString(2, user.getPwd());  
            state.setString(3, user.getNickname());  
            state.setInt(4, user.getChecking());  
            state.setString(5, user.getAnswer());  
                  
            state.executeUpdate();  
            Info.log("用戶添加成功");  
            state.close();  
                  
        }catch(Exception e){  
            e.printStackTrace();  
            Info.error("用戶添加失敗");  
        }finally{  
            if(connection!=null){  
                try{  
                    connection.close();  
                }catch(Exception e){  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
          
    /** 
     * 刪除一個用戶的方法,根據用戶的ID號 
     * @param ID  
     */
    public void delete(String ID){  
        connection=dbCon.getConnection();  
        sql="delete from userData where userID=?";  
        try{  
            state=connection.prepareStatement(sql);  
            state.setString(1, ID);  
                  
            state.executeUpdate();  
            Info.log("用戶刪除成功");  
            state.close();  
                  
        }catch(Exception e){  
            Info.error("用戶刪除失敗");  
        }finally{  
            if(connection!=null){  
                try{  
                    connection.close();  
                }catch(Exception e){  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
          
    /** 
     * 更新用戶數據的方法 
     * @param user 
     */
    public void update(User user){  
        connection=dbCon.getConnection();  
        sql="update userData set pwd=?,nickname=?" +  
                ",checking=?,answer=? where userID=?";  
        try{  
            //執行更新操作時,所填入的數據順序一定要與sql語句的數據順序相同  
            state=connection.prepareStatement(sql);  
            state.setString(1, user.getPwd());  
            state.setString(2, user.getNickname());  
            state.setInt(3, user.getChecking());  
            state.setString(4, user.getAnswer());  
            state.setString(5, user.getID());  
                  
            state.executeUpdate();  
                  
            Info.log("用戶更新成功");  
            state.close();  
                  
        }catch(Exception e){  
            e.printStackTrace();  
            Info.error("數據更新失敗");  
        }finally{  
            if(connection!=null){  
                try{  
                    connection.close();  
                }catch(Exception e){  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
          
    /** 
     * 根據用戶ID查找用戶的信息 
     * @param ID 
     */
    public User get(String ID){  
        User user=new User();  
        connection=dbCon.getConnection();  
        sql="select * from userData where userID=?";  
        try{  
            state=connection.prepareStatement(sql);  
            state.setString(1, ID);  
                  
            ResultSet set=state.executeQuery();  
            while(set.next()){  
                user.setID(set.getString(1).trim());  
                user.setPwd(set.getString(2).trim());  
                user.setNickname(set.getString(3).trim());  
                user.setChecking(set.getInt(4));  
                user.setAnswer(set.getString(5));  
            }  
                  
            state.close();  
            set.close();  
        }catch(Exception e){  
            Info.error("查找失敗");  
        }finally{  
            if(connection!=null){  
                try{  
                    connection.close();  
                }catch(Exception e){  
                    e.printStackTrace();  
                }  
            }  
        }  
        return user;  
    }  
}

查看本欄目

Java代碼

package User;  
      
/** 
 * 用戶類 
 * @author cq 
 * 
 */
public class User {  
        private String ID;//賬號  
        private String pwd;//密碼  
        private String nickname;//昵稱  
        private int checking;//密保驗證編號  
        private String answer;//答案  
      
        public User(){  
                  
        }  
              
        public User(String ID,String pwd){  
            this.ID=ID;  
            this.pwd=pwd;  
        }  
      
        /** 
         * 獲取賬號 
         * @return 
         */
        public String getID() {  
            return ID;  
        }  
      
        /** 
         * 設置賬號 
         * @param iD 
         */
        public void setID(String iD) {  
            ID = iD;  
        }  
      
        /** 
         * 獲取密碼 
         * @return 
         */
        public String getPwd() {  
            return pwd;  
        }  
      
        /** 
         * 設置密碼 
         * @param pwd 
         */
        public void setPwd(String pwd) {  
            this.pwd = pwd;  
        }  
      
        /** 
         * 獲取昵稱 
         * @return 
         */
        public String getNickname() {  
            return nickname;  
        }  
      
        /** 
         * 設置昵稱 
         * @param nickname 
         */
        public void setNickname(String nickname) {  
            this.nickname = nickname;  
        }  
      
        /** 
         * 獲取驗證編號 
         * @return 
         */
        public int getChecking() {  
            return checking;  
        }  
      
        /** 
         * 設置驗證編號 
         * @param checking 
         */
        public void setChecking(int checking) {  
            this.checking = checking;  
        }  
      
        /** 
         * 獲取密保答案 
         * @return 
         */
        public String getAnswer() {  
            return answer;  
        }  
      
        /** 
         * 設置密保答案 
         * @param answer 
         */
        public void setAnswer(String answer) {  
            this.answer = answer;  
        }  
          
}

這裡簡單的介紹了數據庫的增刪查改等功能(這熟悉的名詞是否也在哪裡聽過呢??O(∩_∩) O~),特別需要注意的是,我在更新數據方法中所標明的那一句注釋,很多人經常搞亂了順序而得不到正 確的結果。

此外,還有幾點:

一、一定要記得finally語句中所執行的內容,不管操作是否成功都一定要關閉連接,這一點非常重要 。

二、最好將異常消息打印出來,這在初期編程的時候能夠更加方便的幫你解決問題。

三、在使用完數據庫之後將’sa’用戶的密碼策略改為強制過期,(這一點是出於信息安 全的考慮),在每次使用前再取消密碼強制過期,並修改密碼,再執行jdbc操作,具體修改方法請見上面 第四條。

四、Sql Server2000和2005的連接代碼區別:(注意2000和2005的不同)

1. 連接 SqlServer2000

 Class.forName ("com.microsoft.jdbc.sqlserver.SQLServerDriver");

 URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";

2. 連接 SqlServer2005

 Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");

 URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";
五、可能出現的exception: com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>

WARNING: Failed to load the sqljdbc_auth.dll
解決辦法:在sqljdbc_1.2.2828.100_chs.exe解壓後的文件夾中找到Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\chs\auth\x86下的sqljdbc_auth.dll拷貝到:C:WINDOWSsystem32 目錄下即可。

基本內容就到這裡了,如果你使用的是MySQL,那也沒關系,除了環境配置之外,只是驅動跟端口號需 要修改罷了,快用數據庫優化你的程序吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved