天天看點

ResultSetMetaData 和DatabaseMetaData的用法

ResultSetMetaData 和DatabaseMetaData的用法

1、ResultSetMetaData中的方法的介紹。 2、DatabaseMetaData中主要方法的介紹。 3、如何使用DatabaseMetaData類獲得的資訊進行反向設計表。     資料庫中資訊和表的資訊的獲得的問題,如:資料庫中有多少表,表中的字段的含義等。 首先是ResultSetMetaData: 這個類完成了 查詢結果資訊和結果中的列的各種資訊。它包含的方法以及各個方法的作用,在下面這個示範程式中一一介紹。在這個示範程式中用到資料庫是Access的,資料庫中的表的名字是STUDENTINFO表,包含字段有 IDNO 文本型 長為8 NAME 文本型 長為8 SEX 文本型 長為6 AGE 數值型 長為8 BIRTHDT 文本型 長為8 程式中主要是操作這個表,選擇的驅動是ODBC。程式如下:  

import java.sql.*;   public class DBAccess {  public static java.sql.Connection conn = null;  private String sqlStr = "";  public DBAccess()  {     //new sun.jdbc.odbc.JdbcOdbcDriver();     try {       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");       conn = DriverManager.getConnection("jdbc:odbc:TestDB","admin","");     }     catch (ClassNotFoundException ex) {       System.out.println(ex.toString());     }     catch(SQLException sqlEx){       System.out.println(sqlEx.toString());     }  } public ResultSet Search() {     ResultSet rset = null;     sqlStr = "SELECT * FROM STUDENTINFO";    Statement smt = null;    try {      smt = conn.createStatement();      rset = smt.executeQuery(sqlStr);    }    catch (SQLException ex) {      System.out.println("Exception:"+ex.toString());    }    return rset;    }  public void getResultSetMetaData()  {    ResultSet rs = null;  try {     String[] tp = {"TABLE"};     rs = this.Search();     ResultSetMetaData rsmd = rs.getMetaData();        System.out.println("下面這些方法是ResultSetMetaData中方法");     System.out.println("獲得1列所在的Catalog名字 : " + rsmd.getCatalogName(1));     System.out.println("獲得1列對應資料類型的類 " + rsmd.getColumnClassName(1));     System.out.println("獲得該ResultSet所有列的數目 " + rsmd.getColumnCount());     System.out.println("1列在資料庫中類型的最大字元個數" + rsmd.getColumnDisplaySize(1));     System.out.println(" 1列的預設的列的标題" + rsmd.getColumnLabel(1));     System.out.println(“1列的模式” + rsmd.GetSchemaName(1));     System.out.println("1列的類型,傳回SqlType中的編号 " + rsmd.getColumnType(1));     System.out.println("1列在資料庫中的類型,傳回類型全名" + rsmd.getColumnTypeName(1));     System.out.println("1列類型的精确度(類型的長度): " + rsmd.getPrecision(1));     System.out.println("1列小數點後的位數 " + rsmd.getScale(1));     System.out.println("1列對應的模式的名稱(應該用于Oracle) " + rsmd.getSchemaName(1));     System.out.println("1列對應的表名 " + rsmd.getTableName(1));     System.out.println(“1列是否自動遞增” + rsmd.isAutoIncrement(1));     System.out.println(“1列在資料庫中是否為貨币型” + rsmd.isCurrency(1));     System.out.println(“1列是否為空” + rsmd.isNullable(1));     System.out.println(“1列是否為隻讀” + rsmd.isReadOnly(1));     System.out.println(“1列能否出現在where中” + rsmd.isSearchable(1));     }  catch (SQLException ex) {     ex.printStackTrace();  }  }    public static void main(String args[])  {     DBAccess dbAccess = new DBAccess();     dbAccess.getResultSetMetaData();  } }

    通過上面例子中的方法能夠獲得,ResultSet中的表的資訊。ResultSetMetaData隻是獲得表的資訊, 使用 DatabaseMetaData 則是用來獲得資料庫的資訊,下面介紹這個類的使用方法。   DatabaseMetaData對象提供的是關于資料庫的各種資訊,這些資訊包括: 1、     資料庫與使用者,資料庫辨別符以及函數與存儲過程。 2、     資料庫限制。 3、     資料庫支援不支援的功能。 4、     架構、編目、表、列和視圖等。 通過調用DatabaseMetaData的各種方法,程式可以動态的了解一個資料庫。由于這個類中的方法非常的多那麼就介紹幾個常用的方法來給大家參考。 DatabaseMetaData執行個體的擷取方法是,通過連接配接來獲得的 Connection conn = //建立的連接配接。 DatabaseMetaData dbmd = Conn.getMetaData(); 建立了這個執行個體,就可以使用他的方法來擷取資料庫得資訊。首先是資料庫中使用者辨別符的資訊的獲得,主要使用如下的方法: getDatabaseProductName()用以獲得目前資料庫是什麼資料庫。比如oracle,access等。傳回的是字元串。 getDatabaseProductVersion()獲得資料庫的版本。傳回的字元串。 getDriverVersion()獲得驅動程式的版本。傳回字元串。 supportsResultSetType(ResultSet.resultype)是判定是否支援這種結果集的類型。比如參數如果是Result.TYPE_FORWARD_ONLY,那就是判定是否支援,隻能先前移動結果集的指針。傳回值為boolean,true表示支援。 上面介紹的隻是幾個常用的方法,這個類中還有很多方法,可以到jdk的幫助文檔中去檢視類java.sql.DatabaseMetaData。 這個類中還有一個比較常用的方法就是獲得表的資訊。使用的方法是: getTables(String catalog,String schema,String tableName,String[] types), 這個方法帶有四個參數,他們表示的含義如下: String catalog——要獲得表所在的編目。串“”””意味着沒有任何編目,Null表示所有編目。 String schema——要獲得表所在的模式。串“”””意味着沒有任何模式,Null表示所有模式。該參數可以包含單字元的通配符(“_”),也可以包含多字元的通配符(“%”)。 String tableName——指出要傳回表名與該參數比對的那些表,該參數可以包含單字元的通配符(“_”),也可以包含多字元的通配符(“%”)。 String types——一個指出傳回何種表的數組。可能的數組項是:”TABLE”,”VIEW”, ”SYSTEM TABLE”,”GLOBAL TEMPORARY”,”LOCAL TEMPORARY”,”ALIAS”, “SYSNONYM”。 通過getTables()方法傳回一個表的資訊的結果集。這個結果集包括字段有:TABLE_CAT表所在的編目。TABLE_SCHEM表所在的模式,TABLE_NAME表的名稱。TABLE_TYPE标的類型。REMARKS一段解釋性的備注。通過這些字段可以完成表的資訊的擷取。 還有兩個方法一個是獲得列getColumns(String catalog,String schama,String tablename,String columnPattern)一個是獲得關鍵字的方法 getPrimaryKeys( String catalog, String schema, String table)這兩個方法中的參數的含義和上面的介紹的是相同的。凡是pattern的都是可以用通配符比對的。getColums()傳回的是結果集,這個結果集包括了列的所有資訊,類型,名稱,可否為空等。getPrimaryKey()則是傳回了某個表的關鍵字的結果集。 通過getTables(),getColumns(),getPrimaryKeys()就可以完成表的反向設計了。主要步驟如下: 1、 通過getTables()獲得資料庫中表的資訊。 2、 對于每個表使用,getColumns(),getPrimaryKeys()獲得相應的列名,類型,限制條件,關鍵字等。 3、 通過1,2獲得資訊可以生成相應的建表的SQL語句。     通過上述三步完成反向設計表的過程。