zoukankan      html  css  js  c++  java
  • java 读取数据库中表定义

    将数据库中的表信息读取出来

    package com.cloud.smartreport.utils;
    
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.smart4j.framework.dao.DatabaseHelper;
    
    public class DbToWord
    {
        public static void main(String[] args)
        {
            
            try
            {
                Connection conn = DatabaseHelper.getConnection();
                DatabaseMetaData metadata = conn.getMetaData();
                 System.out.println("数据库已知的用户: "+ metadata.getUserName());
                 System.out.println("数据库的系统函数的逗号分隔列表: "+ metadata.getSystemFunctions());
                 System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ metadata.getTimeDateFunctions());
                 System.out.println("数据库的字符串函数的逗号分隔列表: "+ metadata.getStringFunctions());
                 System.out.println("数据库供应商用于 'schema' 的首选术语: "+ metadata.getSchemaTerm());
                 System.out.println("数据库URL: " + metadata.getURL());
                 System.out.println("是否允许只读:" + metadata.isReadOnly());
                 System.out.println("数据库的产品名称:" + metadata.getDatabaseProductName());
                 System.out.println("数据库的版本:" + metadata.getDatabaseProductVersion());
                 System.out.println("驱动程序的名称:" + metadata.getDriverName());
                 System.out.println("驱动程序的版本:" + metadata.getDriverVersion());
                               
                 System.out.println();
                 System.out.println("数据库中使用的表类型");
                 ResultSet rs = metadata.getTableTypes();
                 while (rs.next()) {
                 System.out.println(rs.getString(1));
                 }
                 rs.close();
                               
                 System.out.println();
                /**
                 * 获取指定的数据库的所有表的类型,getTables()的第一个参数就是数据库名 因为与MySQL连接时没有指定,这里加上,剩下的参数就可以为null了
                 * 第二个参数是模式名称的模式,但是输出也是什么都没有。谁知道告诉我一声
                 */
                System.out.println("获取指定的数据库的所有表的类型");
                ResultSet rs1 = metadata.getTables("stock", null, null, null);
                while (rs1.next())
                {
                    System.out.println();
                    System.out.println("数据库名:" + rs1.getString(1));
                    System.out.println("表名: " + rs1.getString(3));
                    System.out.println("类型: " + rs1.getString(4));
                    String tablename = rs1.getString(3);
                    
                    List<String> keyList = new ArrayList<String>();
                    ResultSet rs3 = metadata.getPrimaryKeys("stock", null, tablename);
                    while (rs3.next())
                    {
                        keyList.add(rs3.getString(4));
                    }
                    rs3.close();
                    
                    PreparedStatement ps = conn.prepareStatement("select * from " + tablename);
                    ResultSet rs2 = ps.executeQuery();
                    ResultSetMetaData rsme = rs2.getMetaData();
    
                    int columnCount = rsme.getColumnCount();
                    //System.out.println("ResultSet对象中的列数" + columnCount);
                    System.out.println("列定义  | 自动编号 | 是否为空  | 主键 ");
                    for (int i = 1; i < columnCount; i++)
                    {
                        System.out.print(rsme.getColumnName(i) + " " + rsme.getColumnTypeName(i) + "("
                            + rsme.getPrecision(i) + ")");
                        System.out.print("| " + rsme.isAutoIncrement(i));
                        System.out.print("| " + rsme.isNullable(i));
                        System.out.println("| "+ keyList.contains(rsme.getColumnName(i)));
                    }
                    System.out.println();
                    rs2.close();
                    ps.close();
                    
                }
                rs1.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

    输出结果:

    数据库名:stock
    表名: trd_daily_volume
    类型: TABLE
    列定义  | 自动编号 | 是否为空  | 主键 
    id BIGINT(20)| true| 0| true
    stock_code VARCHAR(6)| false| 0| true
    trade_date DATETIME(19)| false| 1| false
    trade_status INT(10)| false| 1| false
    open_price DOUBLE(9)| false| 1| false
    high_price DOUBLE(9)| false| 1| false
    low_price DOUBLE(9)| false| 1| false
    close_price DOUBLE(9)| false| 1| false
    dnshr_trade BIGINT(12)| false| 1| false
    

      

  • 相关阅读:
    asp.net 重定向的三种方法
    C# 日期格式转【转】
    PL/SQL %TYPE和%ROWTYPE的区别【转】
    oracle 常用函数【转】
    阿里---arthas---代码诊断工具使用
    线上应用CPU占用过高
    Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
    G1和CMS垃圾回收数据对比
    定位CPU暂用过高问题排查
    OAutho2----实现单点登录
  • 原文地址:https://www.cnblogs.com/panie2015/p/5484902.html
Copyright © 2011-2022 走看看