什麼是JDBC,在什麼時候會用到它?
JDBC的全稱是Java DataBase Connection,也就是Java資料庫連接,我們可以用它來操作關係型資料庫。JDBC介面及相關類在java.sql包和javax.sql包裡。我們可以用它來串連資料庫,執行SQL查詢,預存程序,並處理返回的結果。
JDBC介面讓Java程式和JDBC驅動實現了松耦合,使得切換不同的資料庫變得更加簡單。
有哪些不同類型的JDBC驅動?
有四類JDBC驅動。和資料庫進行互動的Java程式分成兩個部分,一部分是JDBC的API,實際工作的驅動則是另一部分。
A JDBC-ODBC Bridge plus ODBC Driver(類型1):它使用ODBC驅動串連資料庫。需要安裝ODBC以便串連資料庫,正因為這樣,這種方式現在已經基本淘汰了。
B Native API partly Java technology-enabled driver(類型2):這種驅動把JDBC調用適配成資料庫的本地介面的調用。
C Pure Java Driver for Database Middleware(類型3):這個驅動把JDBC調用轉寄給中介軟體伺服器,由它去和不同的資料庫進行串連。用這種類型的驅動需要部署中介軟體伺服器。這種方式增加了額外的網路調用,導致效能變差,因此很少使用。
D Direct-to-Database Pure Java Driver(類型4):這個驅動把JDBC轉化成資料庫使用的網路通訊協定。這種方案最簡單,也適合通過網路連接資料庫。不過使用這種方式的話,需要根據不同資料庫選用特定的驅動程式,比如OJDBC是Oracle開發的Oracle資料庫的驅動,而MySQL Connector/J是MySQL資料庫的驅動。
JDBC是如何?Java程式和JDBC驅動的松耦合的?
JDBC API使用Java的反射機制來實現Java程式和JDBC驅動的松耦合。隨便看一個簡單的JDBC樣本,你會發現所有操作都是通過JDBC介面完成的,而驅動只有在通過Class.forName反射機制來載入的時候才會出現。
我覺得這是Java核心庫裡反射機制的最佳實務之一,它使得應用程式和驅動程式之間進行了隔離,讓遷移資料庫的工作變得更簡單。在這裡可以看到更多JDBC的使用樣本。
什麼是JDBC串連,在Java中如何建立一個JDBC串連?
JDBC串連是和資料庫伺服器建立的一個會話。你可以想像成是一個和資料庫的Socket串連。
建立JDBC串連很簡單,只需要兩步:
A. 註冊並載入驅動:使用Class.forName(),驅動類就會註冊到DriverManager裡面並載入到記憶體裡。
B. 用DriverManager擷取連線物件:調用DriverManager.getConnnection()方法並傳入資料庫連接的URL,使用者名稱及密碼,就能擷取到連線物件。
{% highlight java%}
Connection con = null;
try{
// load the Driver Class
Class.forName("com.mysql.jdbc.Driver");
// create the connection now
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/UserDB",
"pankaj",
"pankaj123");
}catch (SQLException e) {
System.out.println("Check database is UP and configs are correct");
e.printStackTrace();
}catch (ClassNotFoundException e) {
System.out.println("Please include JDBC MySQL jar in classpath");
e.printStackTrace();
}
JDBC的DriverManager是用來做什麼的?
JDBC的DriverManager是一個工廠類,我們通過它來建立資料庫連接。當JDBC的Driver類被載入進來時,它會自己註冊到DriverManager類裡面,你可以看下JDBC Driver類的源碼來瞭解一下。
然後我們會把資料庫配置資訊傳成DriverManager.getConnection()方法,DriverManager會使用註冊到它裡面的驅動來擷取資料庫連接,並返回給調用的程式。
在Java程式中,如何擷取資料庫伺服器的相關資訊?
使用DatabaseMetaData可以擷取到伺服器的資訊。當和資料庫的串連成功建立了之後,可以通過調用getMetaData()方法來擷取資料庫的元資訊。DatabaseMetaData裡面有很多方法,通過它們可以擷取到資料庫的產品名稱,版本號碼,配置資訊等。
DatabaseMetaData metaData = con.getMetaData();String dbProduct = metaData.getDatabaseProductName();
JDBC的Statement是什嗎?
Statement是JDBC中用來執行資料庫SQL查詢語句的介面。通過調用連線物件的getStatement()方法我們可以產生一個Statement對象。我們可以通過調用它的execute(),executeQuery(),executeUpdate()方法來執行靜態SQL查詢。
由於SQL語句是程式中傳入的,如果沒有對使用者輸入進行校正的話可能會引起SQL注入的問題,如果想瞭解