DatabaseMetaData获取数据库信息 .「建议收藏」

DatabaseMetaData获取数据库信息 .「建议收藏」importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.DatabaseMetaData;publicclassDataConn{ publicDataConn(){ } publicstaticvoidma

大家好,又见面了,我是你们的朋友全栈君。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import java.sql.DatabaseMetaData;

public class DataConn {

  public DataConn() {

  }

  public static void main(String[] args) {

    try

{

//加载驱动程序

//下面的代码为加载JDBD-ODBC驱动程序

   Class.forName(“oracle.jdbc.driver.OracleDriver”);

//建立连接

//用适当的驱动程序连接到DBMS,看下面的代码[自行修改您所连接的数据库相关信息]:

   String url=”jdbc:oracle:thin:@192.168.4.45:1521:oemrep”;

   String user = “ums”;

   String password = “rongji”;

//用url创建连接

   Connection con=DriverManager.getConnection(url,user,password);

 

//获取数据库的信息

   DatabaseMetaData dbMetaData = con.getMetaData();

   //返回一个String类对象,代表数据库的URL

   System.out.println(“URL:”+dbMetaData.getURL()+”;”);

   //返回连接当前数据库管理系统的用户名。

   System.out.println(“UserName:”+dbMetaData.getUserName()+”;”);

   //返回一个boolean值,指示数据库是否只允许读操作。

   System.out.println(“isReadOnly:”+dbMetaData.isReadOnly()+”;”);

   //返回数据库的产品名称。

 System.out.println(“DatabaseProductName:”+dbMetaData.getDatabaseProductName()+”;”);

   //返回数据库的版本号。

 System.out.println(“DatabaseProductVersion:”+dbMetaData.getDatabaseProductVersion()+”;”);

   //返回驱动驱动程序的名称。

   System.out.println(“DriverName:”+dbMetaData.getDriverName()+”;”);

  //返回驱动程序的版本号。

   System.out.println(“DriverVersion:”+dbMetaData.getDriverVersion());

   //关闭连接

   con.close();

}

catch (Exception e)

{

//输出异常信息

 System.err.println(“SQLException :”+e.getMessage());

 e.printStackTrace();

}

}

}

================================================================== 

通过上面的例子,我们可以看出,DatabaseMetaData类的对象的实现,如下语句

<%

DatabaseMetaData datameta=con.getMetaData();

%>

DatabaseMetaData类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息。就如我们上面例子中所显示的几个信息[其他的方法请读者参考JDK API中的DatabaseMetaData类]:

getURL()

返回一个String类对象,代表数据库的URL。

getUserName()

返回连接当前数据库管理系统的用户名。

isReadOnly()

返回一个boolean值,指示数据库是否只允许读操作。

getDatabaseProductName()

返回数据库的产品名称。

getDatabaseProductVersion()

返回数据库的版本号。

getDriverName()

返回驱动驱动程序的名称。

getDriverVersion()

返回驱动程序的版本号。

================

一、获取数据库表信息

getTables

ResultSet getTables(String catalog,  String schemaPattern,   String tableNamePattern, String[] types)  throws SQLException
检索可在给定类别中使用的表的描述。仅返回与类别、模式、表名称和类型标准匹配的表描述。它们根据 TABLE_TYPE、TABLE_SCHEM 和 TABLE_NAME 进行排序。

每个表描述都有以下列:

  1. TABLE_CAT String => 表类别(可为 null
  2. TABLE_SCHEM String => 表模式(可为 null
  3. TABLE_NAME String => 表名称
  4. TABLE_TYPE String => 表类型。典型的类型是 “TABLE”、”VIEW”、”SYSTEM TABLE”、”GLOBAL TEMPORARY”、”LOCAL TEMPORARY”、”ALIAS” 和 “SYNONYM”。
  5. REMARKS String => 表的解释性注释
  6. TYPE_CAT String => 类型的类别(可为 null
  7. TYPE_SCHEM String => 类型模式(可为 null
  8. TYPE_NAME String => 类型名称(可为 null
  9. SELF_REFERENCING_COL_NAME String => 有类型表的指定 “identifier” 列的名称(可为null
  10. REF_GENERATION String => 指定在 SELF_REFERENCING_COL_NAME 中创建值的方式。这些值为 “SYSTEM”、”USER” 和 “DERIVED”。(可能为null

注: 有些数据库可能不返回用于所有表的信息。

参数:

catalog – 类别名称,因为存储在数据库中,所以它必须匹配类别名称。该参数为 “” 则检索没有类别的描述,为
null 则表示该类别名称不应用于缩小搜索范围
schemaPattern – 模式名称的模式,因为存储在数据库中,所以它必须匹配模式名称。该参数为 “” 则检索那些没有模式的描述,为
null 则表示该模式名称不应用于缩小搜索范围
tableNamePattern – 表名称模式,因为存储在数据库中,所以它必须匹配表名称
types – 要包括的表类型组成的列表,
null 表示返回所有类型

返回:

ResultSet – 每一行都是一个表描述

抛出:

SQLException – 如果发生数据库访问错误

二、获取表中列信息

getColumns

ResultSet getColumns(String catalog,   String schemaPattern,     String tableNamePattern,    String columnNamePattern)         throws SQLException

检索可在指定类别中使用的表列的描述。

仅返回与类别、模式、表和列名称标准匹配的列描述。它们根据 TABLE_SCHEMTABLE_NAMEORDINAL_POSITION 进行排序。

每个列描述都有以下列:

  1. TABLE_CAT String => 表类别(可为 null
  2. TABLE_SCHEM String => 表模式(可为 null
  3. TABLE_NAME String => 表名称
  4. COLUMN_NAME String => 列名称
  5. DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型
  6. TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的
  7. COLUMN_SIZE int => 列的大小。对于 char 或 date 类型,列的大小是最大字符数,对于 numeric 和 decimal 类型,列的大小就是精度。
  8. BUFFER_LENGTH 未被使用。
  9. DECIMAL_DIGITS int => 小数部分的位数
  10. NUM_PREC_RADIX int => 基数(通常为 10 或 2)
  11. NULLABLE int => 是否允许使用 NULL。
    • columnNoNulls – 可能不允许使用 NULL
    • columnNullable – 明确允许使用 NULL
    • columnNullableUnknown – 不知道是否可使用 null
  12. REMARKS String => 描述列的注释(可为 null
  13. COLUMN_DEF String => 默认值(可为 null
  14. SQL_DATA_TYPE int => 未使用
  15. SQL_DATETIME_SUB int => 未使用
  16. CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数
  17. ORDINAL_POSITION int => 表中的列的索引(从 1 开始)
  18. IS_NULLABLE String => “NO” 表示明确不允许列使用 NULL 值,”YES” 表示可能允许列使用 NULL 值。空字符串表示没人知道是否允许使用 null 值。
  19. SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为null
  20. SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为null
  21. SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null
  22. SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为null
参数:

catalog – 类别名称,因为存储在数据库中,所以它必须匹配类别名称。该参数为 “” 则检索没有类别的描述,为
null 则表示该类别名称不应用于缩小搜索范围
schemaPattern – 模式名称的模式,因为存储在数据库中,所以它必须匹配模式名称。该参数为 “” 则检索那些没有模式的描述,为
null 则表示该模式名称不应用于缩小搜索范围
tableNamePattern – 表名称模式,因为存储在数据库中,所以它必须匹配表名称
columnNamePattern – 列名称模式,因为存储在数据库中,所以它必须匹配列名称

返回:

ResultSet – 每一行都是一个列描述

抛出:

SQLException – 如果发生数据库访问错误

另请参见:

getSearchStringEscape() 

三、表中主键信息

getPrimaryKeys

ResultSet getPrimaryKeys(String catalog,  String schema,  String table)    throws SQLException

检索对给定表的主键列的描述。它们根据 COLUMN_NAME 进行排序。

每个主键列描述都有以下列:

  1. TABLE_CAT String => 表类别(可为 null
  2. TABLE_SCHEM String => 表模式(可为 null
  3. TABLE_NAME String => 表名称
  4. COLUMN_NAME String => 列名称
  5. KEY_SEQ short => 主键中的序列号
  6. PK_NAME String => 主键的名称(可为 null
参数:

catalog – 类别名称,因为存储在数据库中,所以它必须匹配类别名称。该参数为 “” 则检索没有类别的描述,为
null 则表示该类别名称不应用于缩小搜索范围
schema – 模式名称,因为存储在数据库中,所以它必须匹配模式名称。该参数为 “” 则检索那些没有模式的描述,为
null 则表示该模式名称不应用于缩小搜索范围
table – 表名称,因为存储在数据库中,所以它必须匹配表名称

返回:

ResultSet – 每一行都是一个主键列描述

抛出:

SQLException – 如果发生数据库访问错误
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150955.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mybatisplus的mapper使用(华为畅享8plus)

    IService 注释 BaseMapper 注释 进一步封装:采用get查询单行,remove删除,list查询集合,page分页 DDML booleansave(Tentity); 选择字段,策略插入 intinsert(Tentity); 插入一条记录 booleansaveBatch(CollectionentityList); 批量插入 …

  • 为什么0xffffffff是-1?(计算机对整型的存储)[通俗易懂]

    为什么0xffffffff是-1?(计算机对整型的存储)[通俗易懂]一个数字在计算机中都是以二进制补码的形式存储的。先了解这句核心。。。我们认为中的int整型数值顺序java中int类型是4个字节,也就是32位,其中第一位是符号位,int数值的存储结构我们利用System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));拿到int的最大值,是1111111111111111111111111111111,31个1,首位是0(代表正数,省略了)那我们给int的最大值+1,会发生什么呢?Sys

  • Android操作系统架构,分为4个主要功能层_Android系统优化

    Android操作系统架构,分为4个主要功能层_Android系统优化Android操作系统架构Android操作系统整体应用架构Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层

  • hbase解决海量图片存储

    hbase解决海量图片存储随着互联网、云计算及大数据等信息技术的发展,越来越多的应用依赖于对海量数据的存储和处理,如智能监控、电子商务、地理信息等,这些应用都需要对海量图片的存储和检索。由于图片大多是小文件(80%大小在数MB以内),以GFS、HDFS为代表的适用于流式访问大文件的分布式存储系统,若直接用来存储图片,由于元数据膨胀,在扩展性和性能方面均存在严重问题。   为了解决HDFS在小文件存储方面的问题,通

  • 最新面试题汇总(附带答案)【建议看看】

    最新面试题汇总(附带答案)【建议看看】1.性能测试关注的指标是什么?从外部看,性能测试主要关注如下三个指标:吞吐量:每秒钟系统能够处理的请求数、任务数响应时间:服务处理一个请求或一个任务的耗时错误率:一批请求中结果出错的请求所占比例从服务器的角度看,性能测试主要关注CPU、内存、服务器负载、网络、磁盘IO等。2.性能测试怎么做的?/如果你要进行性能测试,你是如何展开操作的?1.确定关键业务,关键路径;2.确定测试的关键数据。比如并发量,响应时间,循环次数等;3.准备测试环境,完成脚本录制或脚本开发;4.执行测试,观察或监控

  • UFT脚本[通俗易懂]

    UFT脚本[通俗易懂]SystemUtil.Run”C:\ProgramFiles(x86)\HP\UnifiedFunctionalTesting\samples\flight\app\flight4a.exe”使用Systemutil.Run打开订票程序Dialog(“Login”).WinEdit(“AgentName:”).Set”mercury”输入代理名称“mercury”Dialog(“

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号