在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時,慢到...