• 【Jdbc/Metadata】借助Metadata获得表字段的设定细节


    表定义:

    create table emp516(
        id number(12),
        f1 nvarchar2(20),
        f2 varchar2(30),
        f3 number(10,2),
        f4 timestamp
    )

    程序:

    package com.hy.lab.fieldproperty;
    
    import java.sql.*;
    
    /**
     * 此类用于获得某表的字段设定细节
     */
    public class TableProber {
        public static Connection getConnection() {
            Connection conn = null;
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
                String user = "luna";
                String pass = "1234";
                conn = DriverManager.getConnection(url, user, pass);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        public static void main(String[] args) {
            String sql = "select * from emp516";
    
            try (Connection conn = getConnection();
                 PreparedStatement stmt=conn.prepareStatement(sql)){
                ResultSet rs = stmt.executeQuery(sql);
                ResultSetMetaData metaData = rs.getMetaData();
                // 获得所有列的数目及实际列数
                int columnCount = metaData.getColumnCount();
                System.out.println("查询结果共有:"+columnCount+"列。");
    
                for (int i = 1; i <= metaData.getColumnCount(); i++) {
    
                    // 获得指定列的列名
                    String columnName = metaData.getColumnName(i);
                    // 获得指定列的列值
                    int columnType = metaData.getColumnType(i);
                    // 获得指定列的数据类型名
                    String columnTypeName = metaData.getColumnTypeName(i);
                    // 所在的Catalog名字
                    String catalogName = metaData.getCatalogName(i);
                    // 对应数据类型的类
                    String columnClassName = metaData.getColumnClassName(i);
                    // 在数据库中类型的最大字符个数
                    int columnDisplaySize = metaData.getColumnDisplaySize(i);
                    // 默认的列的标题
                    String columnLabel = metaData.getColumnLabel(i);
                    // 获得列的模式
                    String schemaName = metaData.getSchemaName(i);
                    // 某列类型的精确度(类型的长度)
                    int precision = metaData.getPrecision(i);
                    // 小数点后的位数
                    int scale = metaData.getScale(i);
                    // 获取某列对应的表名
                    String tableName = metaData.getTableName(i);
                    // 是否自动递增
                    boolean isAutoInctement = metaData.isAutoIncrement(i);
                    // 在数据库中是否为货币型
                    boolean isCurrency = metaData.isCurrency(i);
                    // 是否为空
                    int isNullable = metaData.isNullable(i);
                    // 是否为只读
                    boolean isReadOnly = metaData.isReadOnly(i);
                    // 能否出现在where中
                    boolean isSearchable = metaData.isSearchable(i);
                    //System.out.println(columnCount);
                    System.out.println("第" + i + "列的字段名称:" + columnName);
                    System.out.println("              SqlType中的编号:" + columnType);
                    System.out.println("              数据类型名:" + columnTypeName);
                    System.out.println("              所在的Catalog名字:" + catalogName);
                    System.out.println("              对应数据类型的类:" + columnClassName);
                    System.out.println("              在数据库中类型的最大字符个数:" + columnDisplaySize);
                    System.out.println("              默认的列的标题:" + columnLabel);
                    System.out.println("              模式:" + schemaName);
                    System.out.println("              类型的长度(类型的精确度):" + precision);
                    System.out.println("              小数点后位数:" + scale);
                    System.out.println("              所在表名:" + tableName);
                    System.out.println("              是否自动递增:" + isAutoInctement);
                    System.out.println("              在数据库中是否为货币型:" + isCurrency);
                    System.out.println("              是否为空:" + isNullable);
                    System.out.println("              是否为只读:" + isReadOnly);
                    System.out.println("              能否出现在where中:" + isSearchable);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    输出:

    查询结果共有:5列。
    第1列的字段名称:ID
                  SqlType中的编号:2
                  数据类型名:NUMBER
                  所在的Catalog名字:
                  对应数据类型的类:java.math.BigDecimal
                  在数据库中类型的最大字符个数:13
                  默认的列的标题:ID
                  模式:
                  类型的长度(类型的精确度):12
                  小数点后位数:0
                  所在表名:
                  是否自动递增:false
                  在数据库中是否为货币型:true
                  是否为空:1
                  是否为只读:false
                  能否出现在where中:true
    第2列的字段名称:F1
                  SqlType中的编号:-9
                  数据类型名:NVARCHAR2
                  所在的Catalog名字:
                  对应数据类型的类:java.lang.String
                  在数据库中类型的最大字符个数:20
                  默认的列的标题:F1
                  模式:
                  类型的长度(类型的精确度):20
                  小数点后位数:0
                  所在表名:
                  是否自动递增:false
                  在数据库中是否为货币型:false
                  是否为空:1
                  是否为只读:false
                  能否出现在where中:true
    第3列的字段名称:F2
                  SqlType中的编号:12
                  数据类型名:VARCHAR2
                  所在的Catalog名字:
                  对应数据类型的类:java.lang.String
                  在数据库中类型的最大字符个数:30
                  默认的列的标题:F2
                  模式:
                  类型的长度(类型的精确度):30
                  小数点后位数:0
                  所在表名:
                  是否自动递增:false
                  在数据库中是否为货币型:false
                  是否为空:1
                  是否为只读:false
                  能否出现在where中:true
    第4列的字段名称:F3
                  SqlType中的编号:2
                  数据类型名:NUMBER
                  所在的Catalog名字:
                  对应数据类型的类:java.math.BigDecimal
                  在数据库中类型的最大字符个数:12
                  默认的列的标题:F3
                  模式:
                  类型的长度(类型的精确度):10
                  小数点后位数:2
                  所在表名:
                  是否自动递增:false
                  在数据库中是否为货币型:true
                  是否为空:1
                  是否为只读:false
                  能否出现在where中:true
    第5列的字段名称:F4
                  SqlType中的编号:93
                  数据类型名:TIMESTAMP
                  所在的Catalog名字:
                  对应数据类型的类:oracle.sql.TIMESTAMP
                  在数据库中类型的最大字符个数:11
                  默认的列的标题:F4
                  模式:
                  类型的长度(类型的精确度):0
                  小数点后位数:6
                  所在表名:
                  是否自动递增:false
                  在数据库中是否为货币型:false
                  是否为空:1
                  是否为只读:false
                  能否出现在where中:true
    
    Process finished with exit code 0

    END

  • 相关阅读:
    win10新特性,ubuntu子系统(安装及配置)
    excel计算后列填充
    word中利用宏替换标点标点全角与半角
    CFD-post的奇技淫巧
    mfix模拟流化床燃烧帮助收敛的方法
    cygwin下配置alias
    endnote 使用方法
    win8系统换win7系统
    python中的函数以及递归
    01python算法--算法和数据结构是什么鬼?
  • 原文地址:https://www.cnblogs.com/heyang78/p/16278903.html
Copyright © 2020-2023  润新知