使用 Java 進行 MySQL 開發
有一類非常廣泛的話題:與 MySQL 等關係型資料庫通訊的基於 Java 的多層應用程式。本節介紹了一個非常簡單的樣本,使用本地 Java 應用程式串連到 MySQL。
為了讓 Java 程式能夠與特定的資料庫進行通訊,您要有一個用於那個資料庫的 Java Database Connectivity(JDBC)驅動程式。與大部分主流的關聯式資料庫管理系統(Relational Database Management Systems,RDBMS)一樣,MySQL 也有其自己的 JDBC 驅動程式,當前包括:
- 來自 MySQL AB 的 MySQL Connector/J
- Resin JDBC 驅動程式
MySQL Connector/J 是用於 MySQL RDBMS 的 Sun 的 JDBC 3.0 API 實現,是用於 MySQL 的官方 JDBC 驅動程式。它是百分之百使用 Java 編寫的,因此可以運行於任何具備適當 JVM 環境的作業系統中,包括 POWER 上 Linux 發行版本。所以,此樣本使用的是 Connector/J 驅動程式。它是類型 IV JDBC 驅動程式,已知能夠在 POWER 上 Linux 中應用於多種 Web 應用程式伺服器,比如 IBM WebSphere、BEA WebLogic、Apache Tomcat、JBoss,還有很多。
當然,除了需要用於 MySQL 的 JDBC 驅動程式以外,您還需要 JDK 本身。撰寫本文時,IBM 為用於 POWER 和 PPC 體繫結構的 Linux 所提供的最新版本是 JDK 1.4.2,既有 32-位 的也有 64-位的。可以線上獲得針對 Java 技術的 IBM Developer Kits(見 參考資料)。
此樣本展示的基本代碼將串連到 MySQL 資料庫並執行查詢。
下面是本樣本的完整的 Java 代碼:
清單 2. Java 程式碼範例
import java.io.*; import java.util.*; import java.sql.*; public class Java_MySQL { public static void display_rs(ResultSet rs) throws SQLException { try{ ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i <= rsmd.getColumnCount(); ++i) System.out.print("\t\t\t" + (rsmd.getColumnName(i)).toUpperCase() ); System.out.println(); while ( rs.next() ) { for (int j = 1; j <= rsmd.getColumnCount(); ++j) { Object obj = rs.getObject(j); System.out.print("\t\t\t" + obj.toString()); } System.out.println(); } } catch (SQLException E) { System.out.println("SQLException: " + E.getMessage()); System.out.println("SQLState: " + E.getSQLState()); System.out.println("VendorError: " + E.getErrorCode()); E.printStackTrace(); System.exit(1); } } public static void main(String args[]) { Statement statement = null; Connection connection = null; ResultSet resultset; String query, prompt, input; int choice = -1; try {Class.forName("com.mysql.jdbc.Driver").newInstance();} catch (Exception E) { System.err.println("Unable to load driver."); E.printStackTrace(); System.exit(1); } try { String url="jdbc:mysql://localhost/CONTRACTING"; String username="username"; String password="password"; connection=DriverManager.getConnection(url, username, password); } catch (SQLException E) { System.out.println("SQLException: " + E.getMessage()); System.out.println("SQLState: " + E.getSQLState()); System.out.println("VendorError: " + E.getErrorCode()); E.printStackTrace(); connection=null; System.exit(1); } prompt = "\n\t\t\t1. Show contents of the table JOB\n" + "\t\t\t2. Exit\n\n"; while(true) { System.out.println(prompt); try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); input = in.readLine(); choice = Integer.parseInt(input); } catch (Exception e) { e.printStackTrace(); System.exit(1); } try { switch (choice) { case 1: query="SELECT * FROM JOB;"; statement = connection.createStatement(); resultset = statement.executeQuery(query); display_rs(resultset); break; case 2: System.out.println("Bye!"); System.exit(0); default: System.err.println("Invalid value entered!"); } } catch (SQLException E) { System.out.println("SQLException: " + E.getMessage()); System.out.println("SQLState: " + E.getSQLState()); System.out.println("VendorError: " + E.getErrorCode()); E.printStackTrace(); connection=null; System.exit(1); } } } } |
函數 display_rs()
中有顯示 ResultSet
對象的標準代碼。與 MySQL 資料庫的串連在 main()
函數中完成。
在 MySQL Connector/J 中實現 java.sql.Driver
的類的名稱是 com.mysql.jdbc.Driver
。org.gjt.mm.mysql.Driver
類名可以用於保持與較老版本的向後相容。
讓 JVM 可以使用 Connector/J JDBC 驅動程式的最常見方式是,在 CLASSPATH
變數中包含 mysql-connector-java-[version]-bin.jar 檔案的路徑。
下面給出了字串,接著是通常的 JDBC URL 格式:
String url="jdbc:mysql://localhost/CONTRACTING"; |
成功地串連到 MySQL 伺服器和資料庫後,您就可以執行簡單的查詢,如下:
1. Show contents of the table JOB 2. Exit |
選項“1”將顯示出查詢 “SELECT * FROM JOB”的結果。
JOB_CODE JOB_NAME JOB_HOUR_CHRG 200 Application Programmer 35.48 201 Database Administrator 38.50 202 Technical Support 27.00 207 Database Designer 49.99 |
第二個選項將產生 JOB 表的內容,第三個選項將關閉程式。
此樣本的編譯和運行使用的是 IBM 為用於 POWER 和 PPC 體繫結構的 Linux 所提供的 64-位 JDK 1.4.2。