zoukankan      html  css  js  c++  java
  • java程序获得SqlServer数据表的表结构

    /**
      * 取得一张表的结构信息
      * 使用DatabaseMetaData与ResultSetMetaData结合的方式获取全部属性
      * @param conn   数据连接
      * @param tableName    表名
      * @return  表结构中列的存储对象
      * @throws SQLException
      */
     public TableInfo getTableInfo(Connection conn,Statement st, String tableName) throws SQLException{
      TableInfo result = new TableInfo();
      /**设置表名*/
      result.setTableName(tableName);
      DatabaseMetaData dbmd = conn.getMetaData();
      ResultSet rs = dbmd.getColumns(null, null, tableName.toUpperCase(), null);
      /**判断字段是否自增*/
      String sql = "select * from " + tableName + " where 1=2";
      ResultSet rst = conn.prepareStatement(sql).executeQuery();
      ResultSetMetaData rsmd = rst.getMetaData();
      int i=1;
      
      while(rs.next()){
       //列名称
       String columnName = rs.getString("COLUMN_NAME").toLowerCase();//列名
       //数据类型
       int dataType = rs.getInt("DATA_TYPE");//类型  
       //数据类型名称
       String dataTypeName = rs.getString("TYPE_NAME").toLowerCase();   
       //精度,列的大小
       int precision = rs.getInt("COLUMN_SIZE");//精度   
       //小数位数
       int scale = rs.getInt("DECIMAL_DIGITS");// 小数的位数   
       //是否为空
       int isNull = rs.getInt("NULLABLE");//是否为空   
       //字段默认值
       String defaultValue = rs.getString("COLUMN_DEF");
       //是否自增
       boolean isAutoIncrement = rsmd.isAutoIncrement(i); //自增
       
       ColumnInfo col = new ColumnInfo();                     
       col.setName(columnName);
       col.setDataType(dataType);
       col.setDataTypeName(dataTypeName);
       col.setPrecision(precision);
       col.setScale(scale);
       col.setIsNull(isNull); 
       col.setDefaultValue(defaultValue);
       col.setAutoIncrement(isAutoIncrement);
       
       result.setColInfo(columnName, col);
       i++;
      }
      rs.close();
      /**设置主键*/
      rs = dbmd.getPrimaryKeys(null, null, tableName);
      while(rs.next()){
       result.setPrimaryKey(rs.getString("COLUMN_NAME").toLowerCase(), true);
       System.out.println(rs.getString("COLUMN_NAME"));
      }
      rs.close();
      return result;
     }


     

    /**
     * 列信息存储对象
     * @author 
     */
    public class ColumnInfo {
     /** 主键标识 */
     private boolean isKey;
     /** 列名称 */
     private String name;
     /** 数据类型 */
     private int dataType;
     /** 数据类型名称 */
     private String dataTypeName;
     /** 自增标识 */
     private boolean isAutoIncrement;
     /** 精度 */
     private int precision;
     /** 是否为空*/
     private int isNull;
     /**小数位数 */
     private int scale;
     /**默认值 */
     private String defaultValue;
     public boolean isKey() {
      return isKey;
     }
     public void setKey(boolean isKey) {
      this.isKey = isKey;
     }

     public String getDefaultValue() {

      return defaultValue;
     }
     public void setDefaultValue(String defaultValue) {
      if(null==(defaultValue)){
       
      }else{
       this.defaultValue = "'"+defaultValue+"'";
      }
     }
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }

     public int getDataType() {
      return dataType;
     }
     public void setDataType(int dataType) {
      this.dataType = dataType;
     }
     public boolean isAutoIncrement() {
      return isAutoIncrement;
     }
     public void setAutoIncrement(boolean isAutoIncrement) {
      this.isAutoIncrement = isAutoIncrement;
     }
     public String getDataTypeName() {
      return dataTypeName;
     }
     public void setDataTypeName(String dataTypeName) {
      this.dataTypeName = dataTypeName;
     }
     
     public String toString(){
      StringBuffer buf = new StringBuffer();
      buf.append("------------- ");
      buf.append("字段名称:" + getName() + " ");
      buf.append("数据类型:" + getDataType() + " ");
      buf.append("类型名称:" + getDataTypeName() + " ");
      buf.append("主键:" + isKey() + " ");
      buf.append("自增:" + isAutoIncrement + " ");
      buf.append("为空:" + isNull + " ");
      buf.append("小数位数:" + scale + " ");
      buf.append("精度:"+precision+" ");
      buf.append("初始值:"+defaultValue+" ");
      return buf.toString();
     }
     public int getPrecision() {
      return precision;
     }
     public void setPrecision(int precision) {
      this.precision = precision;
     }
     public int getIsNull() {
      return isNull;
     }
     public void setIsNull(int isNull) {
      this.isNull = isNull;
     }
     public int getScale() {
      return scale;
     }
     public void setScale(int scale) {
      this.scale = scale;
     }
    }

  • 相关阅读:
    HTTP method GET is not supported by this URL
    idea 报错javax/xml/bind/DatatypeConverter
    PartyBid 学习笔记 之 第二张卡片总结
    PartyBid 学习笔记 之 第一张卡片总结
    Yeoman 之 Jade自动化生成的Grunt实现
    Jade —— 简洁的HTML模版引擎
    Underscore.JS 之 消灭for循环
    SqlServer 根据时间统计数据展示图表
    C# 中使用 JavaScriptSerializer 序列化时的时间类型处理
    jQuery 插件 autocomplete 的使用
  • 原文地址:https://www.cnblogs.com/pangblog/p/3279888.html
Copyright © 2011-2022 走看看