服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|

服务器之家 - 编程语言 - JAVA教程 - java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

2020-07-04 11:15java教程网 JAVA教程

下面小编就为大家带来一篇java 查询oracle数据库所有表DatabaseMetaData的用法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一 . 得到这个对象的实例

java" id="highlighter_754652">
?
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的用法(详解)全部内容了,希望大家多多支持服务器之家~

延伸 · 阅读

精彩推荐