`

使用DatabaseMetaDate获取数据库信息

阅读更多
import java.sql.*;
public class GetDBInfo
{
  public GetDBInfo()
  {
  }

  public static void main(String[] args)
  {
  try{
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="dbc:oracle:thin:@localhost:1521:orcl";
    String user="system";
    String pass="******";
    String s;
    Connection con=DriverManager.getConnection(url,user,pass);
        DatabaseMetaData dbmd=con.getMetaData();
    s = dbmd.getDriverName();
    System.out.println("驱动程序的名称是: "+s);
    System.out.println(" ");

    s = dbmd.getDatabaseProductName();
    System.out.println ("数据库名称是:"+s);
    System.out.println(" ");

    ResultSet rs = dbmd.getSchemas();
    System.out.println("模式名有:");
    while(rs.next())
      System.out.print("  "+rs.getString(1));
      System.out.println();
      
     s = dbmd.getSQLKeywords();
    System.out.println("SQL中的关键词为: "+s);
    System.out.println(" ");

    int max=dbmd.getMaxColumnNameLength();
    System.out.println ("列名的最大长度可以是:"+max);
    System.out.println(" ");

    max = dbmd.getMaxTableNameLength();
    System.out.println ("表名的最大长度可以是:"+max);
    System.out.println(" ");

    max = dbmd.getMaxColumnsInSelect();
    System.out.println ("一个select 子句所能返回的最多列数列名的最大长度可是是:"+max);
    System.out.println(" ");

    max = dbmd.getMaxTablesInSelect();
    System.out.println ("一个SELECT语句最多可以访问多少个表:"+max);
    System.out.println(" ");


    max = dbmd.getMaxColumnsInTable();
    System.out.println ("表中允许的最多列数:"+max);
    System.out.println(" ");

    max = dbmd.getMaxConnections();
    System.out.println ("并发访问的用户个数:"+max);
    System.out.println(" ");

    max = dbmd.getMaxStatementLength();
    System.out.println ("SQL语句最大允许的长度:"+max);
    System.out.println(" ");

    s = dbmd.getNumericFunctions();
    System.out.println("数据库的所有数学函数的列表: "+s);
    System.out.println(" ");

    s = dbmd.getStringFunctions();
    System.out.println("数据库的所有字符串函数的列表: "+s);
    System.out.println(" ");

    s = dbmd.getSystemFunctions();
    System.out.println("数据库的所有系统函数的列表: "+s);
    System.out.println(" ");

    s = dbmd.getTimeDateFunctions();
    System.out.println("数据库的所有日期时间函数的列表: "+s);
    System.out.println(" ");

    rs = dbmd.getTypeInfo();
    while(rs.next())
      {
        System.out.print(" 数据类型名:"+rs.getString(1));
        System.out.print("  数据类型:"+ rs.getString(2));
        System.out.print("  精度:"+   rs.getString(3));
        System.out.println("  基数:"+   rs.getString(18));
      }
      System.out.println(" ");

    s = dbmd.getURL();
    System.out.println("此数据库的url: "+s);
    System.out.println(" ");

    s = dbmd.getUserName();
    System.out.println("此数据库的用户: "+s);
    System.out.println(" ");
//好像要注意是大写
    String [ ] t = { "TABLE", "VIEW" };
    rs = dbmd.getTables(null, "HR", "%", t);
    while(rs.next()){
      System.out.print("目录名:"+rs.getString(1));
      System.out.print(" 模式名:"+rs.getString(2));
      System.out.print(" 表名:"+rs.getString(3));
      System.out.print(" 表的类型:"+rs.getString(4));
      System.out.println(" 注释:"+rs.getString(5));
      }
      System.out.println(" ");

    rs = dbmd.getPrimaryKeys(null, "HR","EMPLOYEES");
    while(rs.next()){
      System.out.print("目录名:"+rs.getString(1));
      System.out.print(" 模式名:"+rs.getString(2));
      System.out.print(" 表名:"+rs.getString(3));
      System.out.print(" 列名顺序号:"+rs.getString(4));
      System.out.print(" 列名顺序号:"+rs.getString(5));
      System.out.println(" 主键名:"+rs.getString(6));
      }
      System.out.println(" ");

     rs = dbmd.getTableTypes();
     System.out.println(" 表的类型有:");
     while(rs.next())
       System.out.print("  "+ rs.getString(1));
       System.out.println();
       System.out.println(" ");

     rs = dbmd.getColumns(null, "HR", "EMPLOYEES", "%");
     System.out.println(" 表名 "+" 列名 "+"  数据类型"+" 本地类型名"+" 列的大小"+ " 小数位数"+" 数据基数"+" 是否可空"+" 索引号");
     while(rs.next()){
      System.out.print(rs.getString(3)+" ");
      System.out.print(rs.getString(4)+" ");
      System.out.print(rs.getString(5)+" ");
      System.out.print(rs.getString(6)+" ");
      System.out.print(rs.getString(7)+" ");
      System.out.print(rs.getString(9)+" ");
      System.out.print(rs.getString(10)+" ");
      System.out.print(rs.getString(11)+" ");
      System.out.println(rs.getString(17)+" ");
      }
      System.out.println(" ");

      rs = dbmd.getIndexInfo(null, "HR", "EMPLOYEES", false, false);

       System.out.println(" 表名"+" 索引名"+" 索引类型"+" 索引列名"+" 索引顺序"+ " 小数位数"+" 数据基数"+" 是否可空"+" 索引号");
      while(rs.next()){
      System.out.print(rs.getString(3)+" ");
      System.out.print(rs.getString(6)+" ");
      System.out.print(rs.getString(7)+" ");
      System.out.print(rs.getString(9)+" ");
      System.out.println(rs.getString(10)+" ");
      }
      System.out.println(" ");
    
    rs.close();
       con.close();
    }
    catch(Exception e){System.out.println(e);}
    new GetDBInfo();
  }
}


 

分享到:
评论

相关推荐

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

    在Java编程中,当我们需要与Oracle数据库交互时,`java.sql.DatabaseMetaData`接口提供了一种方式来获取关于数据库的各种元...在使用时,需要注意不同数据库系统的特性和方法参数的设置,以确保正确地获取所需的信息。

    论文模板-justnews6.0.1 插件:QAPress社交问答 v2.3.1-实训商业源码.zip

    论文模板-justnews6.0.1 插件:QAPress社交问答 v2.3.1-实训商业源码.zip

    基于Matlab的储能系统选址定容:蒙特卡洛随机算法优化配置及其应用

    内容概要:本文介绍了基于Matlab的储能系统选址定容程序,主要采用了蒙特卡洛随机算法进行优化配置。文中详细解释了蒙特卡洛算法的工作原理,即通过大量随机抽样来评估不同配置方式下储能系统的性能,从而确定最优配置。此外,还引入了非粒子群算法进一步优化配置效果。程序每行代码均配有详细注释,便于初学者理解和学习。同时,提供了图形化的结果展示,使得结果更为直观。最后,附带相关文献供深入研究。 适合人群:对储能系统优化感兴趣的科研人员、工程技术人员及希望学习Matlab编程的学生。 使用场景及目标:适用于需要解决储能系统选址定容问题的研究项目或工程项目,帮助用户找到最佳配置方案,提高储能效率。 其他说明:程序稳定可靠,所有步骤都有详尽说明,非常适合零基础的学习者入门。

    工程项目管理中风险防控签证管理及反索赔.ppt

    工程项目管理中风险防控签证管理及反索赔.ppt

    oppo s9h s9i固件 10.508

    oppo s9h s9i固件 10.508

    基于FPGA的RWA转RGB视频格式转换源码verilog

    基于FPGA的RWA转RGB视频格式转换源码verilog,这个 Verilog 代码实现了一个基本的 RAW 到 RGB 转换器,适用于 FPGA 实现。主要功能包括:参数化设计:支持配置图像尺寸、位深度和 Bayer 模式,Bayer 模式处理:支持 RGGB、BGGR 等常见 Bayer 模式,双线性插值算法:使用邻域像素进行颜色插值,行缓存机制:使用 3 行缓存实现 2x2 邻域访问,边界处理:处理图像边缘像素的插值问题,完整测试平台:提供测试序列和基本验证逻辑

    曹依蕊-毕业论文.pdf

    曹依蕊-毕业论文.pdf

    实训商业源码-汽修汽配制造类网站源码-毕业设计.zip

    实训商业源码-汽修汽配制造类网站源码-毕业设计.zip

    hello.c P2P的一生

    计算机系统

    基于STM32与UCOS操作系统的BMS电池管理系统源码及原理图解析 - uCos实时操作系统

    内容概要:本文介绍了基于STM32的BMS电池管理系统,重点讲解了其源代码和官方参考原理图。STM32因高性能、低功耗被广泛应用于BMS系统中,能够实时监控电池的关键参数,确保电池的安全高效运行。文中详细解读了官方提供的参考原理图,解释了电路连接和信号传递关系。此外,引入了实时操作系统uCos,增强了任务调度和资源管理能力,使BMS系统对电池状态的监测和控制更为迅速准确。源代码规范且注释详尽,便于理解和移植。文中还穿插了多个代码片段,帮助理解系统运行原理,如通过ADC模块读取电压值并实现实时更新和显示,以及合理分配任务优先级确保电池安全充放电。 适合人群:电子工程专业学生、嵌入式系统开发工程师、从事电池管理系统相关工作的技术人员。 使用场景及目标:①学习STM32在BMS系统中的应用;②掌握实时操作系统uCos的任务调度和资源管理;③理解BMS系统的硬件设计和软件编程;④提高代码移植能力和系统优化技巧。 其他说明:本文不仅适用于初学者入门,也适合有经验的开发者进行深入研究和技术提升。通过学习本文,读者可以在电动汽车、储能系统等领域中更好地应用和发展BMS技术。

    啤酒厂自动化检测仪表内部培训教材.ppt

    啤酒厂自动化检测仪表内部培训教材.ppt

    实训商业源码-社区授权系统-毕业设计.zip

    实训商业源码-社区授权系统-毕业设计.zip

    实训商业源码-今日头条-毕业设计.zip

    实训商业源码-今日头条-毕业设计.zip

    我国主要河流、湖泊矢量边界数据集

    我国主要河流、湖泊矢量边界数据集,包括一级、二级、三级、四级、五级流域和河流数据; 湖泊数据; 数据均为shp格式,可以直接使用主流GIS软甲加载,可用于数据分析、制图等用途。

    河北08安装-第十册-自动化控制仪表安装工程.doc

    河北08安装-第十册-自动化控制仪表安装工程.doc

    KinectV2与机械臂的抓取目标实现:上位机与下位机软件概述

    内容概要:本文介绍了如何利用Kinect V2传感器和机械臂系统,结合上位机(基于VS2019和Qt5的C++编程)和下位机(STM32微控制器),实现目标抓取的任务。具体步骤包括:从Kinect V2获取深度数据并进行图像处理,计算目标位置,进行手眼标定,通过串口通信将逆运动学结果传送到下位机,最后由STM32控制机械臂完成抓取动作。文中详细描述了各个模块的具体实现方法及其代码片段。 适合人群:对机器人技术和嵌入式系统有一定了解的研发人员和技术爱好者。 使用场景及目标:适用于需要实现自动化目标抓取系统的工业应用场合,如智能仓储、生产线自动化等。目标是提高生产效率和精度,减少人工干预。 其他说明:文中提供的代码和算法可以根据实际需求进行修改优化,以适应不同的应用场景。同时,附带的实验结果显示了系统的可行性和有效性。

    基于Matlab的分布式电源接入对9节点配电网电压影响研究

    内容概要:本文探讨了分布式电源(DG)接入对9节点配电网节点电压的影响。通过构建9节点配电网模型,设置分布式电源的容量并在特定节点接入,利用Matlab进行潮流计算,最终绘制电压波形图,展示了DG接入前后各节点电压变化情况。研究表明,DG的接入显著影响配电网的电压分布,特别是在高渗透率情况下,可能导致某些节点电压升高或降低。 适合人群:电力系统研究人员、电气工程学生以及从事智能电网和分布式发电研究的专业人士。 使用场景及目标:适用于评估分布式电源接入对配电网稳定性的影响,帮助优化DG配置,确保电网安全稳定运行。此外,还可用于教学演示,使学生更好地理解DG的工作机制及其对电网的影响。 其他说明:文中提供的Matlab代码为简化版本,实际应用时需要根据具体情况进行调整和完善。

    论文模板-(PC+WAP)货运物流快递pbootcms网站模板 仓储货架类网站源码-实训商业源码.zip

    论文模板-(PC+WAP)货运物流快递pbootcms网站模板 仓储货架类网站源码-实训商业源码.zip

    Matlab中TSP问题的优化计算:蚁群算法的应用

    内容概要:本文介绍了利用Matlab实现蚁群算法来解决TSP(旅行商问题)的方法。首先解释了蚁群算法的概念及其灵感来源——自然界中蚂蚁觅食的行为模式。接着详细阐述了该算法的工作机制,特别是信息素的作用机制,以及它是如何引导蚂蚁们逐步发现更优路径的。最后给出了一个简单的Matlab代码框架,演示了如何设置参数并执行迭代搜索以找到最短路径。 适合人群:对优化算法感兴趣的研究人员和技术爱好者,尤其是那些希望通过编程实践深入理解智能算法的人。 使用场景及目标:适用于需要解决复杂组合优化问题的情境,比如物流配送规划、电路板布线等。目标是让读者掌握一种有效的求解方法,并能将其应用到类似的实际问题当中。 其他说明:文中提供的代码仅为概念验证性质的基础版本,实际应用时还需针对具体情况进行适当修改和完善。此外,对于想要进一步深入了解蚁群算法理论背景或者提高程序性能的读者来说,可以在此基础上继续研究相关文献资料。

    基于蒙特卡洛法的混排涡扇发动机设计点循环计算程序及其与F119发动机的对比分析

    内容概要:本文详细介绍了一款针对混排涡扇发动机设计点循环的计算程序。该程序具备强大的计算和模拟功能,能精确计算混排涡扇发动机的设计点循环。它支持绘制参数分析图以确定最优热力循环参数,并运用蒙特卡洛法分析参数对发动机性能的影响。此外,程序还与F119发动机的公开资料进行了对比,确保计算的准确性和可靠性。程序由输入模块、计算模块、输出模块和图形绘制模块组成,每个模块都有详细的代码注释和规范书写。 适合人群:航空航天领域的研究人员、工程师以及对航空发动机设计感兴趣的学者和技术爱好者。 使用场景及目标:①用于混排涡扇发动机的设计和性能优化;②帮助工程师确定最佳热力循环参数;③评估不同参数组合对发动机性能的影响;④通过与F119发动机的数据对比,验证计算程序的准确性。 其他说明:该程序不仅提供了一个有效的工具来辅助航空发动机的设计,而且通过对F119发动机的对比分析,进一步提升了其实用价值。未来计划继续优化和完善,以满足更多类型航空发动机的需求。

Global site tag (gtag.js) - Google Analytics