第一種:通過ODBC串連資料庫
JAVA語言的跨平台的工作能力(Write Once ,Run Anywhere)、優秀的影像處理能力(我相信現在沒有那種語言可以超過JAVA在網路上的圖形處理能力)、網路通訊功能、通過JDBC資料庫訪問技術等等,讓我們誰都不可否認JAVA語言是SUN公司對於電腦界的一個巨大的貢獻。筆者可以描述這樣一個情境:有一天你上網完全可以不用IE 或者NETSCAPE,上網就像是玩遊戲,你可以獲得遊戲那麼精美的映像和互動的感覺,如果你玩過UO,也許你就知道那種感覺了,但是JAVA做成的東西一定會超過UO的,因為不單單是遊戲,也不是單單是瀏覽器,如果你願意(要你有錢,有時間,有優秀的JAVA人才)你可以把所有的這一切用Java完全整合出來!!!我不是誇大JAVA的功能,大家可以訪問一下http://www.simchina.net的那個社區程式,你就能找到一種感覺了:相信我沒有說什麼假話 。好了,不說廢話了,現在我向你介紹JAVA的資料庫訪問技術----JDBC資料庫訪問技術(你可千萬不要搞成ODBC了!)。
JDBC技術事實上是一種能通過JAVA語言訪問任何結構化資料庫的應用程式介面(API)(Sun這樣說的,我也不知道是不是真的),而且現在的JDBC 3.0據Sun說也能訪問Execel等試算表程式!
JDBC對於資料庫的訪問有四種方式,我們這裡只是介紹兩種:
第一種是通過ODBC做為“橋”(Bridge)對資料庫訪問,第二種是直接對資料庫訪問。
我們先來看看第一種JDBC<-->ODBC訪問的流程:
JDBC Driver Mannager->JDBC<->ODBC橋->ODBC->資料庫客戶機驅動庫->資料庫伺服器->返回查詢結果,在這種訪問中值的我們注意的是雖然JAVA是"Write Once ,Run Anywhere",但是如果通過這種訪問的話,需要用戶端必須設定ODBC和有相應的資料庫客戶機的驅動,當你看了下面的另外一個流程的時候或許你會想:明明下一種更方面,為什麼還要有這個東西的產生!呵呵,因為,未必所有的資料庫伺服器供應商都提供下面的JDBC驅動程式(給JDBC訪問提供相應的介面),所以就有了JDBC<->ODBC Bridge。
接著再讓我們來看看第二種訪問流程:
JDBC Driver Mannager->局部JDBC驅動->用戶端資料庫->資料庫伺服器->返回查詢結果,這種訪問事實上是轉換JDBC調用為相應的資料庫(Oracle, Sybase, Informix, DB2, 和其他的資料庫資料庫管理系統)的用戶端API調用(這麼說,不知道大家能不能懂,說簡單點就好像ASP不是通過DSN對資料庫訪問而是通過OLEDB訪問,說道這裡我還是不知道大家能不能明白我的意思。哎呀,不要扔雞蛋嘛!),這種方式的訪問需要相應的資料庫供應商提供相應的JDBC驅動程式,但是有一種好處,可以獨立於odbc用於可以隨處可Run的用戶端的瀏覽器中的Applet程式。
我們下面將給大家一個通過JDBC-ODBC橋資料庫訪問的執行個體,但是在看下面的案例前我想問大家一次:JDK1.3裝了嗎?資料庫驅動裝了嗎(我使用的是SQLserver)?你該沒有使用Linux吧?雖然java支援Linux,但是老兄我可沒有使用Linux喲(這同JAVA的Write Once ,Run Anywhere沒有關係),由於使用了運行於Win下面的ODBC,我建議你看看這篇東西http://www.aspcn.com/showarticle.asp?id=112,否則你要是有了問題,出不了結果那豈不是要怪我(不過欲加之罪,何患無吃... ...),冤枉呀!
哎呀,說了這麼多的廢話,還是讓我們來看看到底JDBC的調用吧!既然我們是通過odbc訪問資料庫,所以這個odbc是跑不了的,我們先來設定你的odbc:開啟你的odbc資料來源->選擇系統dsn(Click加新的dsn-)->接下來輸入選擇資料庫類型、輸入dsn名:、選擇伺服器、串連資料庫的方式、輸入資料庫的登陸使用者和密碼->測試連接,如果測試成功的話,那麼你的dsn就建立好了,我的dsn名為Sqlserver.使用的是sqlserver7.0,以 “sa”登陸,密碼為空白。這些東西都是後面要用道的!
好了下面讓我們來看程式碼: (該代碼已經通過運行)
//###########################################################
//代碼開始
import java.sql.*;
//載入java資料連線包,java基本所有的資料庫的調用的都在這個東西裡面
public class InsertCoffees {
public static void main(String args[]) {
String url = "jdbc:odbc:sqlserver";
//取得串連的url名,注意sqlserver是dsn名
Connection con;
//執行個體化一個Connection對象
Statement stmt;
String query = "select * from col_link";
//選擇所有的Col_link表中的資料輸出
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//載入jdbc-odbc橋驅動
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
//載入jdbc-odbc橋錯誤
System.err.println(e.getMessage());
//其他錯誤
}
try {
con = DriverManager.getConnection(url, "sa", "");
//資料庫連接
stmt = con.createStatement();
//Create 一個聲明
stmt.executeUpdate("CREATE TABLE col_link (sitename varchar (20) NULL ,siteurl varchar (50) NULL) ");
//執行了一個sql語句產生了一個表col_link的表
stmt.executeUpdate("insert into col_link values('ASP中華網','http://www.aspcn.com')");
stmt.executeUpdate("insert into col_link values('永遠到底有多遠','http://xuankong.com')");
//執行一個insert into語句
stmt.executeUpdate("update col_link set siteurl='http://www.aspcn.com/xuankong/xuankongt.jpg' where siteurl='http://xuankong.com'");
//執行一個update語句,更新資料庫
ResultSet rs = stmt.executeQuery(query);
//返回一個結果集
System.out.println("Col_link表中的資料如下(未經處理資料)");
//下面的語句使用了一個while迴圈列印出了col_link表中的所有的資料
System.out.println("網站名 "+" "+"網站地址");
System.out.println("---------------"+" "+"----------------");
while (rs.next()) {
String s = rs.getString("sitename");
String f = rs.getString("siteurl");
//取得資料庫中的資料
System.out.println(s + " " + f);
/*String t = rs.getString(1);
String l = rs.getString(2);
System.out.println(t + " " + l);*/
/*jdbc提供了兩種方法識別欄位,一種是使用getXXX(注意這裡的getXXX表示取不同類型欄位的不同的方法)獲得欄位名,
第二種*是通過欄位索引,在這裡我把第二種方法注釋了*/
/*你可以訪問這個串連獲得getxxx的用法:http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html*/
}
stmt.close();
con.close();
//上面的語句關閉聲明和串連
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
//顯示資料庫連接錯誤或者查詢錯誤
}
}
}
//代碼結束