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,并且没有设置自动增长。

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

  • 相关阅读:
    arcgis10.2转shp文件中文乱码问题解决方案
    Android Context作为参数传递this
    andriod inputbox
    andriod inputType
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
    终于理解了什么是LGPL
    产品经理如何与强势的技术沟通? 技术比较有资历,会以技术无法实现等方面的原因拒绝处理产品提出的需求。 你们是否遇到这样的技术? 产品懂技术的话,是不是会好一些,因为可以和技术说“行话”了,并且产品懂技术就不会被忽悠了。
    Core Dump总结
    LIBRARY_PATH是编译时候用的,LD_LIBRARY_PATH是程序运行是使用的
    如何禁止C++默认成员函数
  • 原文地址:https://www.cnblogs.com/alsf/p/6752240.html
Copyright © 2011-2022 走看看