设为首页 加入收藏

TOP

反射+枚举+freemarker,自动生成实体类,自动建表建索引 之建表建索引,注解和DatabaseMetaData 获取信息 (四)
2014-11-24 11:54:45 】 浏览:2504
Tags:反射 枚举 freemarker 自动生成 实体 自动 索引 注解 DatabaseMetaData 获取 信息
分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。
* NUM_PREC_RADIX int => 基数(通常为 10 或 2)
* NULLABLE int => 是否允许使用 NULL。
* columnNoNulls - 可能不允许使用 NULL 值
* columnNullable - 明确允许使用 NULL 值
* columnNullableUnknown - 不知道是否可使用 null
* REMARKS String => 描述列的注释(可为 null)
* COLUMN_DEF String => 该列的默认值,当值在单引号内时应被解释为一个字符串(可为 null)
* SQL_DATA_TYPE int => 未使用
* SQL_DATETIME_SUB int => 未使用
* CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数
* ORDINAL_POSITION int => 表中的列的索引(从 1 开始)
* IS_NULLABLE String => ISO 规则用于确定列是否包括 null。
* YES --- 如果参数可以包括 NULL
* NO --- 如果参数不可以包括 NULL
* 空字符串 --- 如果不知道参数是否可以包括 null
* SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
* SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
* SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
* SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null)
* IS_AUTOINCREMENT String => 指示此列是否自动增加
* YES --- 如果该列自动增加
* NO --- 如果该列不自动增加
* 空字符串 --- 如果不能确定该列是否是自动增加参数
*
*/
ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");
while (rs.next()){
String tableCat = rs.getString("TABLE_CAT");//表目录(可能为空)
String tableSchemaName = rs.getString("TABLE_SCHEM");//表的架构(可能为空)
String tableName_ = rs.getString("TABLE_NAME");//表名
String columnName = rs.getString("COLUMN_NAME");//列名
}


//索引信息
/**
* 每个索引列描述都有以下列:
*
* TABLE_CAT String => 表类别(可为 null)
* TABLE_SCHEM String => 表模式(可为 null)
* TABLE_NAME String => 表名称
* NON_UNIQUE boolean => 索引值是否可以不唯一。TYPE 为 tableIndexStatistic 时索引值为 false
* INDEX_QUALIFIER String => 索引类别(可为 null);TYPE 为 tableIndexStatistic 时索引类别为 null
* INDEX_NAME String => 索引名称;TYPE 为 tableIndexStatistic 时索引名称为 null
* TYPE short => 索引类型:
* tableIndexStatistic - 此标识与表的索引描述一起返回的表统计信息
* tableIndexClustered - 此为集群索引
* tableIndexHashed - 此为散列索引
* tableIndexOther - 此为某种其他样式的索引
* ORDINAL_POSITION short => 索引中的列序列号;TYPE 为 tableIndexStatistic 时该序列号为零
* COLUMN_NAME String => 列名称;TYPE 为 tableIndexStatistic 时列名称为 null
* ASC_OR_DESC String => 列排序序列,"A" => 升序,"D" => 降序,如果排序序列不受支持,可能为 null;TYPE 为 tableIndexStatistic 时排序序列为 null
* CARDINALITY int => TYPE 为 tableIndexStatistic 时,它是表中的行数;否则,它是索引中唯一值的数量。
* PAGES int => TYPE 为 tableIndexStatisic 时,它是用于表的页数,否则它是用于当前索引的页数。
* FILTER_CONDITION String => 过滤器条件,如果有的话。(可能为 null)
*
*/
ResultSet rs = dbMetaData.getIndexInfo(null, schemaName, tableName, true, true);
while (rs.next()){
boolean nonUnique = rs.getBoolean("NON_UNIQUE");//非唯一索引(Can index values be non-unique. false when TYPE is tableIndexStatistic )
String indexQualifier = rs.getString("INDEX_QUALIFIER");//索引目录(可能为空)
String indexName = rs.getString("INDEX_NAME");//索引的名称
short type = rs.getShort("TYPE");//索引类型
String columnName = rs.getString("COLUMN_NAME");//列名
String ascOrDesc = rs.getString("ASC_OR_DESC");//列排序顺序:升序还是降序
}


// 还有主键信息,外键信息,视图信息等就不一一列举了。。。。


  2、自动建表建索引操作。
由于上一篇博文中已经介绍了关于枚举类的信息,所以此处不再赘述,直接贴出自动建表建索引的代码,代码中已经注释的很详细了,大体思路如下,先判断待创建的数据表存在与否,不存在则创建,存在则更新,更新时找出数据表中有而枚举类中无的字段,即列,然后更新表结构,然后不论是建表还是更新表,都需要进行判断索引是否存在,是否要建立索引,具体获得索引,获得表信息,获得列信息,上面的DatabaseMetaData 元数据信息已经介绍获取方法。好了,废话不多说,直接上代码:
[java]
package com.test.common;

import static com.test.common.EntityConfigData.DEFAULTS;
import static com.test.common.EntityConfigData.INDEX;
import static com.test.common.EntityC

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java 中调用C的函数 下一篇Java基础01 从HelloWorld到面向对..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目