iT邦幫忙

DAY 29
3

實戰 Java SE 7 系列 第 29

JDBC 4.1

JDBC 是 Java Database Connectivity 的縮寫,它是讓你的 Java 程式跟資料庫溝通的一組 API,透過這個統一的 API 介面,你可以連接各式不同的資料庫系統,對資料庫裡的資料做新增、刪除、修改、查詢等動作。
Java SE 7 裡支援 JDBC 4.1 的規格,跟JDBC 4.0 版比較起來,有兩個主要的改進。第一個就是前面也介紹過的 try-with-resource 語法的支援,第二就是新的 RowSetFactory 這個新的 API。

前面在介紹(第21到24天) try-with-resource 語法時,我們只介紹了 java.io 的部份(還有自創的類別),而 JDBC 4.1 裡的 java.sql.Connection[\b], [b]java.sql.ResultSet[\b], [b]java.sql.Statement[\b] 這三個介面(interface) 也都繼承了 [b]java.lang.AutoCloseable 介面,所以當你用到實作這三個介面的 SQL 物件時,也能將宣告這些物件的陳述式寫在 try-with-resource 的陳述式裡,這樣就不怕忘記關閉資料庫資源了。

範例:

package idv.jacky.ironman4.day29;

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

public class Day29Example1 {

 public static void sampleQueryProcessing(Connection sampleCon) throws SQLException {
 
  String sampleQuery = "select * from STUDENT";
  try (Statement sampleStmt = sampleCon.createStatement()) {
   ResultSet rs = sampleStmt.executeQuery(sampleQuery);
  while (rs.next()) {
  String studentName = rs.getString("NAME");
  String studentAge = rs.getString("AGE");
  System.out.printf(" NAME: %S, AGE: %s%n", studentName, studentAge);
  }
  }
 }
}

RowSetFactory 是一組新的 API,早期沒有 RowSetFactory 時,我們必需把實作 RowSet 的類刟名稱寫死在程式碼裡(因為各家的資料庫都會提供自己的類別)。現在則可以透過 RowSetFactory 這個 API 來統一產生 RowSet 物件,而不需要去管到底是什麼類別實作的。這樣一來,你的程式就更有彈性,只需要更改系統的參數,例如在執行 Java 程式前,用命令列參數來設定:

java -Djavax.sql.rowset.RowSetFactory=com.sun.rowset.RowSetFactoryImpl

如此你就可以隨時抽換使用不同的實作類別,相當的方便。而當你不指定時,Java 會預設使用 com.sun.rowset.RowSetFactoryImpl。

範例:

package idv.jacky.ironman4.day29;
 
import java.sql.SQLException;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;
 
public class Day29Example2 {
 public void sampleMethod(String sampleUserName, String samplePassword) throws SQLException {
 RowSetFactory sampleRowSetFactory = null;
JdbcRowSet sampleRowSet = null;
try {
sampleRowSetFactory = RowSetProvider.newFactory();
sampleRowSet = sampleRowSetFactory.createJdbcRowSet();
sampleRowSet.setUrl("jdbc:sampleDriver:sampleAttribute");
sampleRowSet.setUsername(sampleUserName);
sampleRowSet.setPassword(samplePassword);
sampleRowSet.setCommand("select * from STUDENT");
  sampleRowSet.execute();
  } catch(Exception e) {
   e.printStackTrace();
  }
  }
}

上一篇
Java 與 Unicode
下一篇
NIO2
系列文
實戰 Java SE 7 31

尚未有邦友留言

立即登入留言