使用JDBC創建數據庫對象(3)

發表于:2007-07-14來源:作者:點擊數: 標簽:
使用JDBC創建數據庫對象(3) · 訪問數據庫 一旦連接到數據庫,就可以請求表名以及表列的名稱和內容等信息,而且您可以運行 SQL 語句來查詢數據庫或者添加或修改其內容??捎脕韽臄祿熘蝎@取信息的對象有: DatabaseMetaData 有關整個數據庫的信息:表名、
使用JDBC創建數據庫對象(3)

· 訪問數據庫

一旦連接到數據庫,就可以請求表名以及表列的名稱和內容等信息,而且您可以運行 SQL 語句來查詢數據庫或者添加或修改其內容??捎脕韽臄祿熘蝎@取信息的對象有:

DatabaseMetaData 有關整個數據庫的信息:表名、表的索引、數據庫產品的名稱和版本、數據庫支持的操作。
ResultSet 關于某個表的信息或一個查詢的結果。您必須逐行訪問數據行,但是您可以任何順序訪問列。
ResultSetMetaData 有關ResultSet中列的名稱和類型的信息。

盡管每個對象都有大量的方法讓您獲得數據庫元素的極為詳細的信息,但在每個對象中都有幾種主要的方法使您可獲得數據的最重要信息。然而,如果您希望看到比此處更多的信息,建議您學習文檔以獲得其余方法的說明。

· ResultSet

ResultSet 對象是 JDBC 中最重要的單個對象。從本質上講,它是對一個一般寬度和未知長度的表的一種抽象。幾乎所有的方法和查詢都將數據作為 ResultSet 返回。 ResultSet 包含任意數量的命名列,您可以按名稱訪問這些列。它還包含一個或多個行,您可以按順序自上而下逐一訪問。在您使用 ResultSet 之前,必須查詢它包含多少個列。此信息存儲在 ResultSetMetaData 對象中。

CCCCCC">
// 從元數據中獲得列數 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); 將序號為 int 的列的內容作為整數返回。
getInt(String); 將名稱為 String 的列的內容作為整數返回。
getFloat(int); 將序號為 int 的列的內容作為一個 float 型數返回。
g<tt>etFloat(String);</tt> 將名稱為 String 的列的內容作為 float 型數返回。
getDate(int); 將序號為 int 的列的內容作為日期返回。
getDate(String); 將名稱為 String 的列的內容作為日期返回。
next(); 將行指針移到下一行。如果沒有剩余行,則返回 false 。
close(); 關閉結果集。
getMetaData(); 返回 ResultSetMetaData 對象。

· ResultSetMetaData

您使用 getMetaData() 方法從 ResultSet 中獲取 ResultSetMetaData 對象。您可以使用此對象獲得列的數目和類型以及每一列的名稱。

getColumnCount();
返回 ResultSet 中的列數。
getColumnName(int); 返回列序號為 int 的列名。
getColumnLabel(int); 返回此列暗含的標簽。
isCurrency(int); 如果此列包含帶有貨幣單位的一個數字,則返回 true 。
isReadOnly(int); 如果此列為只讀,則返回 true 。
isAutoIncrement(int); 如果此列自動遞增,則返回 true 。這類列通常為鍵,而且始終是只讀的。
getColumnType(int); 返回此列的SQL數據類型。這些數據類型包括

BIGINT
BINARY
BIT
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INTEGER
LONGVARBINARY
LONGVARCHAR

NULL
NUMERIC
OTHER
REAL
SMALLINT
TIME
TIMESTAMP
TINYINT
VARBINARY
VARCHAR

· DatabaseMetaData

DatabaseMetaData對象可為您提供整個數據庫的信息。您主要用它獲取數據庫中表的名稱,以及表中列的名稱。由于不同的數據庫支持不同的 SQL 變體,因此,也有多種方法查詢數據庫支持哪些 SQL 方法。
getCatalogs() 返回該數據庫中的信息目錄列表。使用 JDBC-ODBC Bridge 驅動程序,您可以獲得用 ODBC 注冊的數據庫列表。這很少用于 JDBC-ODBC 數據庫。
getTables(catalog, schema, tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表的說明。
getColumns(catalog, schema, tableNames,columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表列說明。
getURL(); 獲得您所連接的URL名稱。
getDriverName(); 獲得您所連接的數據庫驅動程序的名稱。

· 獲取有關表的信息

您可以使用 DataBaseMetaData 的 getTables() 方法來獲取數據庫中表的信息。這個方法有如下 4 個 String 參數:

results =
dma.getTables(catalog, schema, tablemask, types[]);

其中參數的意義是:

catalog 要在其中查找表名的目錄名。對于 JDBC-ODBC 數據庫以及許多其他數據庫而言,可將其設置為 null。這些數據庫的目錄項實際上是它在文件系統中的絕對路徑名稱。
schema 要包括的數據庫“方案”。許多數據庫不支持方案,而對另一些數據庫而言,它代表數據庫所有者的用戶名。一般將它設置為 null 。
tablemask 一個掩碼,用來描述您要檢索的表的名稱。如果您希望檢索所有表名,則將其設為通配符 % 。 請注意, SQL 中的通配符是 % 符號,而不是一般PC用戶的*符號。
types[] 這是描述您要檢索的表的類型的String數組。數據庫中通常包括許多用于內部處理的表,而對作為用戶的您沒什么價值。如果它是空值,則您會得到所有這些表。如果您將其設為包含字符串“ TABLES ”的單元素數組,您將僅獲得對用戶有用的表格。

用于從數據庫中獲取表名的簡單代碼相當于獲取 DatabaseMetaData 對象,并從其中檢索表名:

con = DriverManager.getConnection(url);
//獲取數據庫的元數據

dma =con.getMetaData();
//將數據庫中的表的名稱轉儲出來

String[] types = new String[1];
types[0] = "TABLES"; //設置查詢類型

//請注意通配符是
% 符號(而不是
“*”)

results = dma.getTables(null, null, "%", types);

然后,我們可以打印出表名,正如我們上面所做的那樣:

boolean more = results.next();
while (more)
{
for (i = 1; i <= numCols; i++)
System.out.print(results.getString(i)+" ");
System.out.println();
more = results.next();
}

如前文所述,將所有代碼包括在 try 塊中。

(未完待續)

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

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