java 查询oracle数据库所有表DatabaseMetaData的用法(详解)
作者:jingxian 发布时间:2024-01-16 02:31:33
一 . 得到这个对象的实例
Connection con ;
con = DriverManager.getConnection(url,userName,password);
DatabaseMetaData dbmd = con.getMetaData();
二. 方法getTables的用法
原型:
ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type)
此方法可返回结果集合ResultSet ,结果集中有5列, 超出会报越界异常
功能描述:得到指定参数的表信息
参数说明:
参数:catalog:目录名称,一般都为空.
参数:schema:数据库名,对于oracle来说就用户名
参数:tablename:表名称
参数:type :表的类型(TABLE | VIEW)
注意:在使用过程中,参数名称必须使用大写的。否则得到什么东西。
三. 方法getColumns的用法
功能描述:得到指定表的列信息。
原型:
ResultSet DatabaseMetaData getColumns(String catalog,String schema,String tableName,String columnName)
参数说明:
参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称
参数columnName : 列名称
四、方法getPrimaryKeys的用法
功能描述:得到指定表的主键信息。
原型:
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数组中的某一项,用以表和视图。
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();
}
}
}
}
}
猜你喜欢
- 数据的合并与关联是数据处理过程中经常遇到的问题,在SQL、HQL中大家可能都有用到 join、uion all 等 ,在 Pandas 中也
- 学过Python的人应该都知道,Python是支持多线程的,并且是native的线程。本文主要是通过thread和threading这两个模
- 动画效果如下:GIF看起来可能会有点卡wxml<view class="confirm bubble">确定
- CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的×××方式。我的理解是,比如你访问过招商银行的
- 切分文件最近遇到需要切分文件的需求,当然首选用python来解决,网上搜了下感觉都太复杂了,其实用python自带函数即可解决。f = op
- 前言废话滑块验证码破解是一直都想搞的项目,毕竟多数网站都会采用滑块验证码,于是最近在修改论文的闲暇之余把这事儿给解决了。要搞现在的滑块验证码
- 由于GIL(Global Interpreter Lock)的存在使得在同一时刻Python进程只能使用CPU的一个核心,也就是对应操作系统
- 01 实现背景1、PHPdict.txt,一个文本文件,包含可能的敏感目录后缀2、HackRequests模块,安全测试人员专用的类Requ
- MySQL数据库远程访问权限设置对于初学者小伙伴来说,我们安装mysql到本地服务,再用一些图形化工具链接。一般情况下我们都能链接成功;但是
- k近邻算法的介绍k近邻算法是一种基本的分类和回归方法,这里只实现分类的k近邻算法。k近邻算法的输入为实例的特征向量,对应特征空间的点;输出为
- 参考OpenCV摄像头使用代码import cv2cap = cv2.VideoCapture(4) # 使用第5个摄像头(我的电脑插了5个
- 本文实例讲述了python获得两个数组交集、并集、差集的房部分。分享给大家供大家参考。具体如下:1. 获取两个list 的交集#方法一:a=
- 人工智能是一个很广阔的领域,很多编程语言都可以用于人工智能开发,所以很难说人工智能必须用哪一种语言来开发。选择多也意味着会有优劣之分,并不是
- 什么是面向事件的编程(事件驱动的编程):编程中所有的程序是由事件决定 – 可以是由用户操作(键盘,鼠标),也可以是由其他程序和流的到达或者操
- 目标跟踪是对摄像头视频中的移动目标进行定位的过程,有着非常广泛的应用。实时目标跟踪是许多计算机视觉应用的重要任务,如监控、基于感知的用户界面
- Python偏函数Python偏函数和我们之前所学习的函数传参中的缺省参数有些类似,但是在实际应用中还是有所区别的,下面通过模拟一个场景一步
- 本文实例讲述了Django框架实现分页显示内容的方法。分享给大家供大家参考,具体如下:分页1、作用数据加载优化2、前端引入bootstrap
- 一. 抛出异常Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,
- 为了能够使用ERWin能够进行基于MySQL数据库的物理设计,可以采用以下方法步骤(假设你已经有了一个设计好的LOGICAL MODEL):
- DRF中的Request在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很