用JDBC連接數據庫(3)

發表于:2007-07-14來源:作者:點擊數: 標簽:
用JDBC連接數據庫(3) 編寫訪問數據庫的JDBC代碼 現在,我們準備研究一下如何編寫訪問數據庫的 Java 程序。我們將要用到的數據庫是名為 groceries.mdb的Microsoft Access數據庫。數據庫中包括的數據是三個本地蔬菜店的一些普通貨物 的價格。食品表如下所示
用JDBC連接數據庫(3)

編寫訪問數據庫的JDBC代碼

現在,我們準備研究一下如何編寫訪問數據庫的Java程序。我們將要用到的數據庫是名為
groceries.mdb的Microsoft Aclearcase/" target="_blank" >ccess數據庫。數據庫中包括的數據是三個本地蔬菜店的一些普通貨物
的價格。食品表如下所示:


FoodKey
FoodName

1 Apples
2 Oranges
3 Hamburger
4 Butter
5 Milk
6 Cola
7 Green beans

存儲表如下:

StoreKey
StoreName

1 Stop and Shop
2 Village Market
3 Waldbaum´s

蔬菜店價格表只包括以上表的鍵和價格:

FSKey
StoreKey
FoodKey
Price

1 1 1 $0.27
2 2 1 $0.29
3 3 1 $0.33
4 1 2> $0.36
5 2 2 $0.29
6 3 2 $0.47
7 1 3 $1.98
8 2 3 $2.45
9 3 3 $2.29
10 1 4 $2.39
11 2 4 $2.99
12 3 4 $3.29
13 1 5 $1.98
14 2 5 $1.79
15 3 5 $1.89
16 1 6 $2.65
17 2 6 $3.79
18 3 6 $2.99
19 1 7 $2.29
20 2 7 $2.19
21 3 7 $1.99

在ODBC上注冊你的數據庫

在Windows 95或NT下訪問一個ODBC數據庫之前,你必須在控制面板的ODBC驅動程序中注冊這些數據
庫。在Windows95下,使用控制面板中的ODBC圖標;在Windows NT下,你會在開始菜單下找到它。(
如果沒找到,你應按照在這之前所講到的安裝ODBC驅動程序WX1350.exe。)

雙擊ODBC圖標并在圖一所示的情況下點擊Add按鈕,然后選擇一個數據庫驅動程序(在這里使用
Microsoft Access)并點擊OK。輸入數據源名稱(Grocery prices)和這個數據庫的介紹(in local
stores)(這兩個都與文件名無關),然后再選擇數據庫。當找到數據庫,你的屏幕將如圖二所示。按
OK鍵并關閉面板。



Figure 1: The ODBC control panel setup screen.



Figure 2: Selecting a database and description in the ODBC control panel.



與一個數據庫相連

所有的數據庫對象和方法都在java.sql包中,你必須import java.sql.*到任何使用JDBC的程序中。要想
連接一ODBC數據庫,你必須首先將JDBC-ODBC bridge驅動程序調入。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

這個命令調入驅動程序并創建該類的一個實例。然后,要想連接一個指定的數據庫,你必須創建
Connection類的一個實例,再用URL語法指向數據庫。

String url = "jdbc:odbc:Grocery prices";
Connection con = DriverManager.getConnection(url);

注意你在此用到的數據庫名稱是你在ODBC設置控制面板中輸入的數據資源名。

URL語法對于不同類型的數據庫會很不一樣。

jdbc:subprotocol:subname

前面的幾個字母代表連接協議并總是jdbc?;蛟S還可能有子協議,這里的子協議被指定為odbc。它定義了對數
據庫類的連接機制。若你正連接一數據庫其它機器上的服務器,你還需指定機器和子目錄。

jdbc:bark//doggie/elliott

最后,你應指定一用戶名和密碼作為連接字符串的一部分。

jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof

訪問數據庫

一旦與數據庫相連,你可以按表的名稱、列的名稱和內容索取信息,也可以運行SQL命令查詢數據庫
、添加或修改數據庫內容??捎脕韽臄祿飓@取信息的對象有:

DatabaseMetaData 關于數據庫的總體信息:表名、表索引、數據庫產品名稱
和版本、數據庫支持的操作。
ResultSet 表或一次查詢結果的信息。對數據的訪問是逐行的,但對
列的訪問可采取任何順序。
ResultSetMetaData 一個ResultSet中列名和類型的信息。

每個對象都有大量的方法,使你能夠獲得數據庫中元素的細節信息。另外還可以通過一些主要的方法
,來得到數據的最重要的信息。但如果你想了解更多的信息,我建議你去研究一下其它方法的介紹文
檔。

The ResultSet

ResultSet是JDBC中最重要的單獨對象。它是具有一般寬度和未知長度的表的一種抽象。幾乎所有的
方法和查詢所返回的數據都是ResultSet。一個ResultSet對象包含任意個命名的列。它還包含一個或
多個行,你可以從頂到底按次序在這些行間移動。在使用ResultSet對象之前,你應確認其中有多少
列,該信息保存在ResultSetMetaData對象中。

//get the number of columns from the metadata
ResultSetMetaData rsmd;
rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();

當獲得一ResultSet對象時,它指向第一行之前。你可用next()方法得到其它行,但當到結尾是,該
方法將返回false。既然從數據庫中獲取數據會導致錯誤的產生,你應把對結果的處理置于一個try
塊中。

try
{
rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();
boolean more = results.next();
while (more)
{
for (i = 1; i <= numCols; i++)
System.out.print(results.getString(i)+" ");
System.out.println();
more = results.next();
}
results.close();
}
catch(Exception e)
{System.out.println(e.getMessage());}

你可以用多種方式得到ResultSet中的數據,這要根據每列保存的數據類型而定。而且,你可按列號
或列名得到一列的內容。值得注意的是,列號起始于1,而不是0。ResultSet對象的其它更普通的方
法還有:

getInt(int);
以integer方式返回列號為int的列的內容。
getInt(String);
以integer方式返回列名為String的列的內容
getFloat(int);
以float方式返回列號為int的列的內容。
getFloat(String);
以float方式返回列名為String的列的內容。
getDate(int);
以date方式返回列號為int的列的內容。
getDate(String);
以date方式返回列名為String的列的內容。
next();
將行指針指向下一行。沒有其它行時返回false。
close();
關閉result set。
getMetaData();
返回ResultSetMetaData對象。

ResultSetMetaData
ResultSetMetaData對象可從ResultSet中利用getMetaData()方法獲得。通過該對象,你可以直到列
數和列的類型以及每列的名稱。

getColumnCount();
返回ResultSet中列的數量。
getColumnName(int);
返回列號為int的列的名稱。
getColumnLabel(int);
返回指定列的label。
isCurrency(int);
若該列包含貨幣單元的數值,則返回true。
isReadOnly(int);
若該列只讀,則返回true。
isAutoIncrement(int);
若該列自動積增,則返回true。這種列多為鍵且總是
只讀的。
getColumnType(int);
返回該列的SQL數據類型。這些數據類型包括:
BIGINT
BINARY
BIT
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INTEGERONGVARBINARY
LONGVARCHAR
NULL
NUMERIC
OTHER
REAL
SMALLINT
TIME
TIMESTAMP
TINYINT VARBINARY VARCHAR

DatabaseMetaData
通過DatabaseMetaData對象,可獲得整個數據庫的信息。它主要被用來數據庫中各表的名稱和表中
各列的名稱。由于不同的數據庫支持不同的SQL變量,所以它包括大量的用于查詢該數據庫支持什
么SQL方法的方法。 .

getCatalogs()
返回數據庫中的信息目錄的列表。利用JDBC-ODBC
Bridge驅動程序,你得到一列已注冊到ODBC的數據庫。
getTables(catalog, schema, tableNames, columnNames) 返回所有滿足tableNames和columnNames的表的表名稱
描述。
getColumns(catalog, schema, tableNames, columnNames) 返回所有滿足tableNmaes和columnNames的列的列名稱描述。
getURL();
返回正在連接的URL的名稱。
getDriverName();
返回正在連接的數據庫驅動程序的名稱。

(全文完)

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97