JDBC檢視資料表結構

2021-07-16 00:01:56 字數 4130 閱讀 8984

在jdbc連線oracle資料庫成功之後,怎麼取得資料庫配置資訊及資料庫表和字段的相關資訊?本文做一簡單介紹。

以下是連線資料庫的例子

connectiondb cdb = new connectiondb();//新建資料庫連線物件

databasemetadata meta = cdb.createconnection().getmetadata();//取得資料庫連線元資料。

首先通過「select table_name from user_tables」sql語句可以取得資料庫下的所有使用者表(一般是取使用者表,也可取系統表)。

取得的使用者表資訊存放到resultset(rs)中,順便指出resultset的使用在乙個迴圈結束後最後關閉,否則容易產生記憶體溢位異常。取得所有使用者

表之後就可以對每個表進行詳細資訊的檢視及表字段屬性的檢視,也可檢視表與表之間的對應關係。下面列出各種屬性及方法:

一:取得資料庫相關資訊

meta.geturl();//返回與這個資料庫的鏈結的url

meta.getusername(); //返回與這個資料庫的鏈結的使用者

meta.isreadonly();//資料庫是否為唯讀

meta.getdatabaseproducename();//資料庫產品名稱

meta.getdatabaseproduceversion();//資料庫產品版本,返回字串

meta.getdatabaseproduceversion();//版本號

meta.getdrivername();//驅動程式

meta.getdriverversion();//驅動程式版本

meta.supportsresultsettype(resultset.resultype);判定是否支援這種結果集的型別,比如引數如果是result.type_forword_only是判定是否支援只能先前移動結果集的指標,返回值為boolean,true表示支援

二;取得資料表及欄位相關資訊

rs.getmetadata().getcolumncount();//取得指定資料表的字段總數,返回值為int型

rs.getmetadata().getcolumnname(n);//取得第n個字段的名稱,返回值為string型

rs.getmetadata().getcolumnlabel(n);//返回n所對應的列的顯示標題

rs.getmetadata().getcolumndisplaysize(n);//缺的第n個字段的長度,返回值為int型

rs.getmetadata().getcolumntypename(n);//返回第n個字段的資料型別

rs.getmetadata().isreadonly(n);//返回該n所對應的列是否唯讀.

rs.getmetadata().isnullable(n)返回該n所對應的列是否可以為空.

rs.getmetadata().getschemaname(n)n列的模式

rs.getmetadata().getprecision(n);取得第n列欄位型別長度的精確度

rs.getmetadta().getscale(n);第n列小數點後的位數

rs.getmetadata().isautoincrement(n);第n列是否為自動遞增

rs.getmetadata().iscurrency(n);是否為貨幣型別

rs.getmetadata().issearchable(n);n列能否出現在where語句中.

三:取得關鍵字段相關資訊

1:主鍵資訊

meta.getprimarykeys(string catalog, string schema, string table);取得表table的主鍵資訊,並以resultset形式返回。catalog:要獲得表所在的編目,null表示所有編目。schema:要獲得表所在的模式,null表示所有模式,table:指定的表名稱。

primarykey.getstring(int n);主鍵相關資訊。1:null(不知什麼意思,有待詳查)2:該欄位所在資料庫名稱。3:主鍵所在表名稱。4:主鍵名稱。

2:外來鍵資訊

meta.getimportedkeys(null,null,tablename);取得外來鍵資訊,以resultset形式返回。

importkey.getstring(int n);2,3,4,和上面一樣。7:該外來鍵所對應的外來鍵表。8:該外來鍵名稱。(僅列出較常用到部分)

3:與該錶相關的其他表的外來鍵資訊

meta.getexportedkeys(null,null,tablename);取得與該錶相關的其他表的外來鍵資訊。

具體**例項:

//檢視使用者表結構

new arraylist();//字段列表(包含每個欄位的部分屬性)

list

list

=new arraylist();//表名列表

// map nlist = new hashmap();//1:n對映關係集合

list nlist =

new arraylist();//1:n對映關係集合

connectiondb cdb =

new connectiondb();//資料庫連線物件

aasysyyxxactionform aform = (aasysyyxxactionform)form;

string tablename = aform.gettablename();//取得表名稱

string sql =

"select * from "

+ tablename;

databasemetadata meta = cdb.createconnection().getmetadata();

//取得1:n對映關係,collections

resultset exportkey = meta.getexportedkeys(null, null, tablename);

int mapkey =

1; while(exportkey.next())

resultset primarykey = meta.getprimarykeys(null, null, tablename);//得到主鍵集合

primarykey.next();

resultset result = cdb.querydb(sql);//查詢結果集

resultset rs = cdb.querydb("select table_name from user_tables");//查詢到的表名結果集

while(rs.next())

for(int i=

1; i<=result.getmetadata().getcolumncount(); i++)else

resultset importkey = meta.getimportedkeys(null, null, tablename);//得到外來鍵集合

while(importkey.next()) else

}forms.setfieldname(result.getmetadata().getcolumnname(i));//欄位名

forms.setfieldsize(result.getmetadata().getcolumndisplaysize(i));//字段長度

forms.settypename(result.getmetadata().getcolumntypename(i));//字段型別名

lists.add(forms);

}cdb.closestatement();//關閉statement

cdb.closeconnection();//關閉connection

request.setattribute("lists", lists);//所選表字段列表

request.setattribute("list", list);//所有表名列表,用於填充下拉列表

request.setattribute("nlist", nlist);

}

資料表結構

修改資料表 alter table 表名sql 的書寫不考慮順序,但是批量執行 需要要考慮好先執行哪些,後執行哪些 在修改資料表結構時,必須要明確 修改的字段中是否存在資料,例如 如果需要更改乙個欄位的約束為非空約束,那麼首先要保證該字段中已有的資料沒有null值。因此在做程式之前資料庫分析,設計是...

mysql 檢視資料表結構,查詢資料表欄位名

describe命令 一 describe命令用於檢視特定表的詳細設計資訊,例如為了檢視guestbook表的設計資訊,可用 describe guestbook describe ol user userid 二 可通過 show comnus 來檢視資料庫中表的列名,有兩種使用方式 show c...

檢視mysql資料表資訊

檢視資料表資訊,如果直接對錶執行sql語句的話,當表很大或者其他客戶端正在對錶操作時,可能會很慢,比如檢視表中的記錄條數,使用 select count from tablename 對於很大的表並且有其他客戶端這在對錶進行更新時會非常慢,試過100萬行的表 20個客戶端正在執行insert時,慢到...