一 . 得到這個對象的實例
1
2
3
|
Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); |
二. 方法getTables的用法
原型:
1
|
ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type) |
此方法可返回結果集合ResultSet ,結果集中有5列, 超出會報越界異常
功能描述:得到指定參數的表信息
參數說明:
參數:catalog:目錄名稱,一般都為空.
參數:schema:數據庫名,對于oracle來說就用戶名
參數:tablename:表名稱
參數:type :表的類型(TABLE | VIEW)
注意:在使用過程中,參數名稱必須使用大寫的。否則得到什么東西。
三. 方法getColumns的用法
功能描述:得到指定表的列信息。
原型:
1
|
ResultSet DatabaseMetaData getColumns(String catalog,String schema,String tableName,String columnName) |
參數說明:
參數catalog : 類別名稱
參數schema : 用戶方案名稱
參數tableName : 數據庫表名稱
參數columnName : 列名稱
四、方法getPrimaryKeys的用法
功能描述:得到指定表的主鍵信息。
原型:
1
|
ResultSet DatabaseMetaData getPrimaryKeys(String catalog,String schema,String tableName) |
參數說明:
參數catalog : 類別名稱
參數schema : 用戶方案名稱
參數tableName : 數據庫表名稱
備注:一定要指定表名稱,否則返回值將是什么都沒有。
五、方法.getTypeInfo()的用法
功能描述:得到當前數據庫的數據類型信息。
六、方法getExportedKeys的用法
功能描述:得到指定表的外鍵信息。
參數描述:
參數catalog : 類別名稱
參數schema : 用戶方案名稱
參數tableName : 數據庫表名稱
下面以MySQL和Oracle為例來講解這個兩個參數。
Oracle和MySQL數據的組織結構是完全不同,直觀表象上,表和視圖的掛接途徑不一樣,在Oracle中,采取的是分用戶管理機制,表和視圖掛接在某個用戶下,此時用戶會成為Oracle的一個”模式(schema)”;而在MySQL中表和視圖是直接掛接在數據庫下的。這樣,在Oralce中獲取catalog得到的是null,獲取schema得到大寫的是用戶名稱列表。而在MySQL中得到的catalog是數據庫名稱列表,而schema是null。讀者可以通過DatabaseMetaData提供的如下兩個方法進行測試,他們返回的都是ResultSet數據類型。
//獲取類別定義
rs=dbmd.getCatalogs();
//獲取模式定義
rs=dbmd.getSchemas();
基于上述分析:
如果數據庫為MySQL:那么第一個參數catalog,可以是數據庫的名稱,當該項為null時候,為Url串中指定的數據庫名稱,第二個參數schema,填入null;
如果數據庫為Oralce: 那么第一個參數catalog,為null,第二個參數schema,填入大寫的用戶名稱例如”SCOTT”,如果該項目為null,那么查詢范圍為所有的模式用戶。
返回值分析
方法getTables返回值是一個結果集(ResultSet)類型,對于該結果集中的信息,到JDK1.5預留了20多個項目用來描述表的相關信息,但是,并不是每個數據都會將這20多個項目返回的. 我們能夠常用到的有如下的四個項目:
TABLE_SCHEM:對于Oracle而言,是大寫的用戶名稱,對MySQL而言為null 。
TABLE_NAME:表的名稱 。
TABLE_CAT=對Oracle而言為null,對MySQL而言是數據庫名稱 。
TABLE_TYPE=表的類型,依據第四個參數types數組中的某一項,用以表和視圖。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class dababase { private String url= "jdbc:oracle:thin:@localhost:1521:zhyl" ; //服務器地址:,端口號:1521,數據庫實例名字:zhyl。 private String username= "andatabase" ; private String pw= "oracl" ; private Connection conn= null ; //用戶名字和密碼是自己建立的。 public Connection OpenConn(){ try { Class.forName( "oracle.jdbc.driver.OracleDriver" ); try { conn=DriverManager.getConnection(url,username,pw); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public ResultSet executeQuery(String sql){ dababase db = new dababase(); ResultSet rs = null ; Connection con =db.OpenConn(); try { Statement sm = con.createStatement(); rs = sm.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; } public void close(){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 獲取數據庫中所有表的表名,并添加到列表結構中。 public List getTableNameList(Connection conn) throws SQLException { DatabaseMetaData dbmd = conn.getMetaData(); //訪問當前用戶ANDATABASE下的所有表 ResultSet rs = dbmd.getTables( "null" , "ANDATABASE" , "%" , new String[] { "TABLE" }); //System.out.println("kkkkkk"+dbmd.getTables("null", "%", "%", new String[] { "TABLE" })); List tableNameList = new ArrayList(); while (rs.next()) { tableNameList.add(rs.getString( "TABLE_NAME" )); } return tableNameList; } // 獲取數據表中所有列的列名,并添加到列表結構中。 public List getColumnNameList(Connection conn, String tableName) throws SQLException { DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs = dbmd.getColumns( null , "%" , tableName, "%" ); List columnNameList = new ArrayList(); while (rs.next()) { columnNameList.add(rs.getString( "COLUMN_NAME" )); } return columnNameList; } public static void main(String s[]) throws SQLException { dababase dbConn = new dababase(); Connection conn = dbConn.OpenConn(); if (conn== null ) System.out.println( "連接失敗" ); else System.out.println( "連接成功" ); try { List tableList = dbConn.getTableNameList(conn); //取出當前用戶的所有表 //List tableList = dbConn.getColumnNameList(conn, "LOGIN");//表名稱必須是大寫的,取出當前表的所有列 System.out.println(tableList.size()); for (Object object : tableList) { String ss=(String)object; System.out.println(ss); } } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null ) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } |
以上就是小編為大家帶來的java 查詢oracle數據庫所有表DatabaseMetaData的用法(詳解)全部內容了,希望大家多多支持服務器之家~