zoukankan      html  css  js  c++  java
  • java数据库编程:使用元数据分析数据库

    databaseMetaData

    使用元数据可以分析数据库基本信息,包括版本,数据库名称,或者指定表的主键。

    代码实例

    package 类集;
    import java.sql.Connection ;
    import java.sql.DriverManager ;
    import java.sql.SQLException ;
    import java.sql.DatabaseMetaData ;
    import java.sql.ResultSet ;
    public class DatabaseMetaDataDemo{
        // 定义MySQL的数据库驱动程序
        public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
        // 定义MySQL数据库的连接地址
        public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
        // MySQL数据库的连接用户名
        public static final String DBUSER = "root" ;
        // MySQL数据库的连接密码
        public static final String DBPASS = "aaaaaa" ;
        public static void main(String args[]) throws Exception{    // 所有异常抛出
            Connection conn = null ;        // 数据库连接
            DatabaseMetaData dmd = null ;        // 数据库元数据
            ResultSet rs = null ;
            Class.forName(DBDRIVER) ;    // 加载驱动程序
            conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
            dmd = conn.getMetaData() ;    // 实例化对象
            System.out.println("数据库名称:" + dmd.getDatabaseProductName() ) ;
            System.out.println("数据库版本:" + dmd.getDatabaseMajorVersion() + "."//分别得到主版本号和次版本号
                + dmd.getDatabaseMinorVersion()) ;
            rs = dmd.getPrimaryKeys(null,null,"user") ;    // 取得user表的主键
            while(rs.next()){
                System.out.println("表类别:" + rs.getString(1)) ;
                System.out.println("表模式:" + rs.getString(2)) ;
                System.out.println("表名称:" + rs.getString(3)) ;
                System.out.println("列名称:" + rs.getString(4)) ;
                System.out.println("主键序列号:" + rs.getString(5)) ;
                System.out.println("主键名称:" + rs.getString(6)) ;
            }
            conn.close() ;            // 数据库关闭
        }
    };

    运行结果:

    Sun Apr 23 12:42:47 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    数据库名称:MySQL
    数据库版本:5.7
    表类别:sys
    表模式:null
    表名称:user
    列名称:age
    主键序列号:1
    主键名称:PRIMARY

    对于获取主键的方法getPrimaryKeys,返回值是什么有以下说明:

    当然DatabaseMetaData还有以下等等一堆方法:

    ResultSetMetaData

    使用这个接口,可以获取ResultSet对象中列的类型和属性,ResultSetMetadata存储了ResultSet的Meta。可以通过以下方法获取ResultSet的信息。

    代码实例:

    package 类集;
    import java.sql.Connection ;
    import java.sql.DriverManager ;
    import java.sql.SQLException ;
    import java.sql.ResultSetMetaData ;
    import java.sql.PreparedStatement ;
    public class ResultSetMetaDataDemo{
        // 定义MySQL的数据库驱动程序
        public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
        // 定义MySQL数据库的连接地址
        public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
        // MySQL数据库的连接用户名
        public static final String DBUSER = "root" ;
        // MySQL数据库的连接密码
        public static final String DBPASS = "aaaaaa" ;
        public static void main(String args[]) throws Exception{    // 所有异常抛出
            Connection conn = null ;        // 数据库连接
            ResultSetMetaData rsmd = null ;        // 数据库元数据
            PreparedStatement pstmt = null ;
            Class.forName(DBDRIVER) ;    // 加载驱动程序
            conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
            String sql = "SELECT name,age,birthday FROM user" ;
           pstmt = conn.prepareStatement(sql) ;    // 实例化对象
            rsmd = pstmt.getMetaData() ;    //注意,这里没有进行pstmt进行语句执行。
            System.out.println("一共返回" + rsmd.getColumnCount() + "条数据。") ;
            if(rsmd.isAutoIncrement(1) ){
                System.out.println(rsmd.getColumnName(1)+"列是自动增长的。") ;
            }
            conn.close() ;            // 数据库关闭
        }
    };

    输出结果:

    Sun Apr 23 12:56:59 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    一共返回3条数据。

    因为这个表的主键是age,并且没有设置自动增长。

    以上操作,一般在数据开发的底层比较经常使用,类似反射机制,取得基本信息,基本开发是不会使用的。

  • 相关阅读:
    设计模式之一(策略模式)
    电脑开机进入不了XP界面
    IBM X系列笔记本通过U盘安装系统方法全攻略
    DELPHI 访问其它电脑文件(局域网)
    笔记本维修小插曲 屏幕不亮处理方式
    delphi 笔记
    电脑小子的新婚夜
    如何得到动态链接库的输出函数(delphi tdump.exe)
    sql server重复数据处理
    如何使用jQuery向asp.net Mvc传递复杂json数据Filter篇
  • 原文地址:https://www.cnblogs.com/alsf/p/6752240.html
Copyright © 2011-2022 走看看