1. 程式人生 > >關於JAVA9通過JDBC連線 sql server 資料庫的問題

關於JAVA9通過JDBC連線 sql server 資料庫的問題

在學習到SQL語句的嵌入式式程式設計時,我興致勃勃地開始嘗試受用jdbc嘗試一下!!!
但是,讓讓我悲痛欲絕的一天也就開始了!!!
首先,先來簡單的過一遍jdbc連線sql server 資料庫的過程:

  1. 載入驅動程式:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  2. 通過DriverManager獲得資料庫的連線:
    Connection conn = DriverManager.getConnection("jdbc:sqlserver://DESKTOP-4HGN7AP:1433;DatabaseName=studentData", "sa", "123456");
  3. 接下來就是對書資料庫進行操作了:
    對資料庫的操作的語句是通過資料庫連線物件進行建立的,
    Statement stmt = conn.createStatement();
    這個語句就相當於建立了一個Statement物件stmt,stmt就是用來向資料庫傳送sql語句的,既然對資料庫進行了操作,那肯定是會有結果的,而且在資料庫中的結果好不是一般的單個變數而是乘坐結果集,在Java裡就是ResultSet。在建立stmt時我們並沒有指明具體執行什麼sql語句,接下來就要完成這一步了(當然也有別的方法制定):
    ResultSet rs = stmt.executeQuery(sql);
    這樣我們就得到了一個結果集了

    其實連線資料庫,操作資料庫的過程並不複雜,但是在其中配置環境的過程中常常出現一些令我十分困惑的問題,這也是為什麼這是我悲痛欲絕的一天了!接下來就來說說我這次遇到的問題吧:

    1.讓你的資料庫能夠被連線!

要通過jdbc訪問資料庫,你的資料庫就必須是對外開放的,什麼意思呢?因為畢竟一個java程式是不屬於sql server 的,java程式是通過連線你的資料庫所在的伺服器來進行訪問資料庫的,就是通過TCP/IP協議,並且要設定好連線的埠,預設是1433,但是這部配置其實很簡單,通過 SQLServerManager(sql server配置管理器)來進行設定就好了。如圖:
這裡寫圖片描述
TCP/IP設定成這樣就好了,sql server 中的網路配置如下即可:
這裡寫圖片描述
還有就是你的資料庫例項要處於啟動狀態,不然是不可能連線上資料庫的哦:
這裡寫圖片描述
這個時候可以開啟你的cmd程式,鍵入telnet 127.0.0.1 1433

看看你的埠設定成功了沒有,如果沒有重複上述步驟。

2.搞定你的資料庫的身份驗證方式!

可以開啟sql server 的SSMS,右擊伺服器->屬性->安全性,在右側面板出檢視伺服器身份驗證
這裡寫圖片描述
切記!一定要設定成sql server和windows身份驗證模式!之後再檢視你要使用的使用者名稱的屬性:
這裡寫圖片描述
保證你的使用者名稱允許連線到資料庫引擎,登入名是出於啟用的狀態!

3.找到符合你的JDK的jdbc驅動程式包!!!

這裡說的sqljdbc只是一個統稱,不同jdk的驅動程式包的包名是不一樣的,方便起見,一下均使用sqljdbc表示。
走到這一步也就離成功不遠了,但是也是最艱難的一步(至少對我來說是)。一定要是符合你的JDK版本的驅動程式包!!!這裡助你一臂之力:點這裡找到適合你的sqljdbc驅動程式包!!!
如果jdk和sqljdbc不匹配的話你可能會一直處於無法連上的狀態,我猜測是因為如果你的JDK版本更高的話,無法使用低版本的sqljdbc,語序也許是因為sqljdbc是向下相容的吧。
下載到了sqljdbc之後,就要設定classpath了!既然都到了jdbc這個階段了,jdk什麼的肯定都已經搞定了,這裡也就不細說了,找到環境變數,在classpath中新增你下載的sqljdbc包的位置,比如我的是放在 D:\Program Files\Java\jre\jdbc\sqljdbc_6.4\enu\mssql-jdbc-6.4.0.jre9.jar 裡的,所以在classpath裡新增 “;D:\Program Files\Java\jre\jdbc\sqljdbc_6.4\enu\mssql-jdbc-6.4.0.jre9.jar”,到此sqljdbc驅動程式也就配置好了,寫個程式試試吧:


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class connectionURL {
    public static void main(String[] args){
         Connection conn;
         Statement stmt;
         ResultSet rs;
         //這裡的DEKTOP-4HGN7AP根據自己的受苦的伺服器來設定
         String url = "jdbc:sqlserver://DESKTOP-4HGN7AP:1433;DatabaseName=studentData";
         String sql = "select * from student";
         try {
             try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                System.out.println("驅動成功!");
             } catch (ClassNotFoundException e) {
                e.printStackTrace();
             }

             // 連線資料庫
             conn = DriverManager.getConnection(url, "sa", "123456");
             System.out.println("資料庫連線成功!");
             // 建立Statement物件
             stmt = conn.createStatement();
             //獲得結果集
             rs = stmt.executeQuery(sql);

             System.out.println("Sno------Sname------Sex------age------dno------dormno");
             while (rs.next()) {
                 String sno = rs.getString("Sno");
                 String sname = rs.getString("Sname");
                 String sex = rs.getString("Sex");
                 int age = rs.getInt("Sage");
                 String dno = rs.getString("dno");
                 String dormno = rs.getString("dormno");

                 System.out.println(sno+"------"+sname+"------"+sex+"------"+age+"------"+dno+"------         "+dormno);
             }
             if (rs != null) {
                 rs.close();
                 rs = null;
             }
             if (stmt != null) {

                 stmt.close();
                 stmt = null;
             }
             if (conn != null) {
                 conn.close();
                 conn = null;
            }
         } catch (SQLException e) {

             e.printStackTrace();
             System.out.println("資料庫連線失敗");
        }
     }
}

資料庫用完之後要關閉連線,結果集,語句都要關閉!