關於JAVA9通過JDBC連線 sql server 資料庫的問題
在學習到SQL語句的嵌入式式程式設計時,我興致勃勃地開始嘗試受用jdbc嘗試一下!!!
但是,讓讓我悲痛欲絕的一天也就開始了!!!
首先,先來簡單的過一遍jdbc連線sql server 資料庫的過程:
- 載入驅動程式:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- 通過DriverManager獲得資料庫的連線:
Connection conn = DriverManager.getConnection("jdbc:sqlserver://DESKTOP-4HGN7AP:1433;DatabaseName=studentData", "sa", "123456");
- 接下來就是對書資料庫進行操作了:
對資料庫的操作的語句是通過資料庫連線物件進行建立的,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("資料庫連線失敗");
}
}
}
資料庫用完之後要關閉連線,結果集,語句都要關閉!