什么是數據庫( 三 )


如果您希望編寫代碼來處理 PC 客戶機數據庫,如 dBase、Foxbase 或 Access,則您可能會使用第一種方法,并且擁有用戶機器上的所有代碼 。更大的客戶機-服務器數據庫產品已提供了第 3 級別的驅動程序 。
兩層模型和三層模型
當數據庫和查詢它的應用程序在同一臺機器上,而且沒有服務器代碼的干預時,我們將生成的程序稱為兩層模型 。一層是應用程序,而另一層是數據庫 。在 JDBC-ODBC 橋系統中通常是這種情況 。
當一個應用程序或 applet 調用服務器,服務器再去調用數據庫時,我們稱其為三層模型 。當您調用稱為“服務器”的程序時通常是這種情況 。
編寫 JDBC 代碼訪問數據庫
用 ODBC 注冊您的數據庫
連接數據庫
所有與數據庫有關的對象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必須加入 "import java.sql.* " 。JDBC 要連接 ODBC 數據庫,您必須首先加載 JDBC-ODBC 橋驅動程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
該語句加載驅動程序,并創建該類的一個實例 。然后,要連接一個特定的數據庫,您必須創建 Connect 類的一個實例,并使用 URL 語法連接數據庫 。
String url = "jdbc:odbc:Northwind";
Connection con = DriverManager.getConnection(url);
請注意,您使用的數據庫名是您在 ODBC 設置面板中輸入的“數據源”名稱 。
URL 語法可能因數據庫類型的不同而變化極大 。
jdbc:subprotocol:subname
第一組字符代表連接協議,并且始終是 jdbc 。還可能有一個子協議,在此處,子協議被指定為 odbc 。它規定了一類數據庫的連通性機制 。如果您要連接其它機器上的數據庫服務器,可能也要指定該機器和一個子目錄:
jdbc:bark//doggie/elliott
最后,您可能要指定用戶名和口令,作為連接字符串的一部分:
jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof
訪問MSSQL Server方法:(驅動程序需要:msutil.jar,msbase.jar,mssqlServer.jar)
DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver
URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo
username=sa
password=
maxcon=10
mincon=1
poolName=SkyDev
利用我們開發的數據庫類,使用方法如下:
DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost",
1433, "demo", "sa", ""));
Connection con = DbO.getConnection();
//類代碼
package skydev.modules.data;
public final class SqlServerConnectionFactory
extends ConnectionFactory {
private final String dbDriver =
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String host;
private int port;
private String databaseName;
public SqlServerConnectionFactory() {
super.setDriverName(dbDriver);
}
/**
*
* @param host 數據庫所在的主機名:如"localhost"
* @param port SQL服務器運行的端口號,如果使用缺省值 1433,傳入一個負數即可
* @param databaseName 數據庫名稱
* @param userName 用戶名
* @param password 口令
*/
public SqlServerConnectionFactory(String host,
int port,
String databaseName,
String userName,
String password) {
this.setHost(host);
this.setPort(port);
this.setDatabaseName(databaseName);
this.setUserName(userName);
this.setPassword(password);
init();
}
private void init() {
super.setDriverName(dbDriver);
super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" +
new Integer(port).toString() + ";DatabaseName=" +
databaseName.trim());
//super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo");
}
……
//------------------------------------------------------------------------------------
訪問MySQL的方法:
DBDriver=com.mysql.jdbc.Driver
URL=jdbc:mysql://localhost/demo
username=
password=
maxcon=5
mincon=1
poolName=zhengmao
訪問數據庫
一旦連接到數據庫,就可以請求表名以及表列的名稱和內容等信息,而且您可以運行 SQL 語句來查詢數據庫或者添加或修改其內容 ??捎脕韽臄祿熘蝎@取信息的對象有:
DatabaseMetaData 有關整個數據庫的信息:表名、表的索引、數據庫產品的名稱和版本、數據庫支持的操作 。
ResultSet 關于某個表的信息或一個查詢的結果 。您必須逐行訪問數據行,但是您可以任何順序訪問列 。
ResultSetMetaData 有關 ResultSet 中列的名稱和類型的信息 。
盡管每個對象都有大量的方法讓您獲得數據庫元素的極為詳細的信息,但在每個對象中都有幾種主要的方法使您可獲得數據的最重要信息 。然而,如果您希望看到比此處更多的信息,建議您學習文檔以獲得其余方法的說明 。

推薦閱讀