1. 程式人生 > >JDBC檢視資料表結構

JDBC檢視資料表結構

在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);取得與該表相關的其他表的外來鍵資訊。
具體程式碼例項:
//檢視使用者表結構

  public ActionForward queryTable(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)throws Exception {
        if
(log.isDebugEnabled()) { log.debug("Entering 'queryTable' method"); } List lists = 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()) { AaSysYyxxActionForm asyForm = new AaSysYyxxActionForm(); asyForm.setCollectionName(exportKey.getString(7)); nList.add(asyForm); // nList.put(exportKey.getString(7), exportKey.getString(7)); mapKey++; } 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()) { list.add(rs.getString("TABLE_NAME")); } for(int i=1; i<=result.getMetaData().getColumnCount(); i++){//欄位總數 AaSysYyxxActionForm forms = new AaSysYyxxActionForm(); if(result.getMetaData().getColumnName(i).equals(primaryKey.getString(4))) {//判斷是否為主鍵 3:表名 4:主鍵名 forms.setIsPkey("是"); }else { forms.setIsPkey("否"); } ResultSet importKey = meta.getImportedKeys(null, null, tableName);//得到外來鍵集合 while(importKey.next()) { if(result.getMetaData().getColumnName(i).equals(importKey.getString(8))) {//判斷是否為外來鍵 forms.setIsIkey("是"); forms.setImportTable(importKey.getString(3));//設定外來鍵表 break; }else { forms.setIsIkey("否"); } } 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); return mapping.findForward("queryTable"); }

相關推薦

JDBC檢視資料結構

在JDBC連線Oracle資料庫成功之後,怎麼取得資料庫配置資訊及資料庫表和欄位的相關資訊?本文做一簡單介紹。 以下是連線資料庫的例子 ConnectionDB cdb = new ConnectionDB();//新建資料庫連線物件

MySQL 檢視資料結構以及詳情的方法

一、 查看錶結構 下面三個是我們最常用的檢視資料表結構的語句: desc tabledescribe tableshow columns from tbale如果你在控制檯一次輸入,就會發現這三個語句所列印的結果是一樣的。 比如我在本地study_test_db數控中嘗

MySQL——檢視資料結構

1.   查看錶的基本結構語句  DESCRIBE用  DESCRIBE/DESC  語句可以查看錶的欄位資訊,其中包括欄位名、欄位資料型別、是否為主鍵、是否有預設值等。語法規則如下:DESCRIBE  表明;或者簡寫為:DESC  表明;       【例】 分別使用  D

iOS -轉載-使用Navicat檢視資料的ER關係圖

Navicat軟體真是一個好東西。今天需要分析一個數據庫,然後想看看各個表之間的關係,所以需要查看錶與表之間的關係圖,專業術語叫做ER關係圖。  預設情況下,Navicat顯示的介面是這樣的:          &

深度剖析Zabbix Web scenarios資料結構

深度剖析Zabbix Web scenarios資料表結構 前言 因開發需求,需要解析Zabbix web監控資料表結構;因為網上關於Zabbix資料表結構解析的比較少,所以心血來潮寫了一篇作為記錄。 突破口 對Zabbix資料庫表結構做解析的時候,我有個習慣,直接針對某個itemid懟。

Navicat工具匯出Mysql資料結構到Excel檔案中

------------------------------------------------------------------------ 前言     專案中資料庫設計已經完成,現在到了程式碼實現的階段,資料庫中沒有資料,測試看不出效果,領導要求添點資料,單個

Mysql資料庫如何檢視資料table被哪些儲存過程procedure使用過

一、摘要 由於程式碼重構,修改了多張表結構,java後臺程式碼做相應修改處理,開發人員內測沒問題提交業務部門測試時發現,新客戶取不到產品價格,原因是儲存過程呼叫的還是就的資料表。為此,需要先找出哪些儲存過程使用到了這些表,然後修改。那麼問題來了,mysql資料庫

Informix資料結構分析資料整理之欄位型別說明和查詢SQL語句

查詢所有Informix資料表字段型別SQL語句: select a.tabname,b.colname,b.coltype,case   b.coltype when '0' then 'CHAR' when '1' then 'SMALLINT' when '2' the

檢視mysql結構建立語句的方法

檢視mysql表結構的方法有三種: 1、desc tablename; 例如: 要檢視jos_modules表結構的命令: desc jos_modules; 檢視結果: mysql> desc jos_modules; +------------------+---

利用navicat匯出資料結構和insert語句

用了navicat一段時間了,發現navicat確實非常方便,可支援多種資料庫。以前一直覺得他的到處sql檔案比較麻煩,每個表都會生成一個sql檔案,不方便進行匯入操作。今天突然發現它也有批量到出成一個sql檔案的功能。 操作步驟 選單 : 資料傳輸    目標選擇,然後進

phpmyadmin資料結構沒有顯示註釋列

新開的一個專案,用phpmyadmin作為圖形化操作資料庫工具。建立資料表時為其每列新增好註釋,瀏覽資料表內容有顯示註釋內容,但是檢視資料表結構沒有顯示註釋列,不方便直觀檢視資料表每列的意思。 上網搜尋並沒有發現解決方法,對比有註釋列的資料庫伺服器,猜測可能是因為phpmyadmin版本(小於4.7)造

檢視mysql結構的指令

來源自我的部落格 desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_schema

MYSQL不同主機下資料結構轉移

問題:現將 192.168.200.XXX MySQL資料庫A中表結構完全複製至127.0.0.1 MySQL資料庫B 處理方式1: 1、匯出資料庫A中表結構為sql檔案,語句為: mysqldump

使用navicat for mysql匯出資料結構資料

方法:1、選中需要匯出的表結構的資料庫,點選“工具”–>資料傳輸(或者直接右鍵選擇資料傳輸)。 2、在彈出的窗口裡左邊可以選擇需要匯出的表,右邊選擇連線或檔案(我要匯出sql檔案,所以我選的是檔

無限層級mysql資料結構

# 無限層級mysql資料表結構 # 建立表 -- auto-generated definition create table target_resource ( id int not null primary key, resource_i

Oracle查詢資料結構SQL

select     A.column_name  ,A.data_type  ,A.data_length  ,A.data_precision  ,     A.Data_Scale  ,A.nullable  ,A.Data_default  ,B.comments

Oracle查詢資料結構/欄位/型別/大小

Oracle資料庫字典在Oracle的絕大多數資料字典檢視中都有象DBA_TABLES,ALL_TABLES和USER_TABLES這樣的檢視家族。Oracle中有超過100個檢視家族,下表列出了最重要和最常用的檢視家族,需要注意的是每個檢視家族都有一個DBA_,一個ALL_

jdbc獲取資料表表結構

  做製作開發平臺時,首要的一點是如何取得資料庫表結構資訊。一般通用的做法就是通過JDBC中的ResultSetMetaData類來進行操作,當你取得了資料庫表結構資訊後,比如說表的每個欄位名稱,欄位型別等。 首先取得資料庫連線後取得DatabaseMetaData。 Da

phpcms v9 資料結構

表 1 : v9_admin 管理員表 欄位 型別 Null 預設 額外 註釋 userid mediumint(6) unsigned PK auto_increment 使用者id usernam

mysql千萬級資料結構修改

當需要對錶進行ddl操作如加索引、增刪列時,資料量小時直接線上修改表結構影響不大 當表達到百萬、千萬資料就不能直接線上修改表結構 下面是具體的過程: 1、備份資料 select * from ih_order into outfile '/bak/order.txt'; m