import static com.test.common.EntityConfigData.NULLABLE;
import static com.test.common.EntityConfigData.TYPE;
import static com.test.common.EntityConfigData.TYPE_DEFUALT_INT;
import static com.test.common.EntityConfigData.TYPE_DEFUALT_LONG;
import static com.test.common.EntityConfigData.TYPE_DEFUALT_STRING;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.test.PackageClass;
/**
* 自动建表建索引类
* @author Lufeng
*
*/
public class GenDB {
private String sourceDir; // 配置源文件夹
public GenDB(String source) {
this.sourceDir = source;
}
/**
* 获取不同类型默认长度
* @param clazz
* @param obj
* @param type
* @return
* @throws Exception
*/
public int getDefaultLength(String type) throws Exception {
int length = 0;
if(type == null) {
throw new RuntimeException("不能识别的类型:" + type);
}
// 根据不同类型返回不同默认长度
if("int".equals(type)) {
length = TYPE_DEFUALT_INT;;
} else if("long".equals(type)) {
length = TYPE_DEFUALT_LONG;
} else if("String".equals(type)) {
length = TYPE_DEFUALT_STRING;
}
return length;
}
public String getSqlType(String type) {
if("int".equals(type)) {
result = "integer";
} else if("long".equals(type)) {
result = "bigint";
} else if("String".equals(type)) {
result = "varchar";
}
return result;
}
/**
* 获取配置类中的所有字段名
* @param clazz
* @return
*/
public List
List
// 获得所有枚举字段成员(id, account, name, profession...),并遍历获取字段名
Object[] enums = clazz.getEnumConstants();
result.add("id"); // id是默认添加的
for (Object e : enums) {
result.add(e.toString());
}
return result;
}
/**
* 获取所有约束信息
* @param clazz
* @param obj
* @return
* @throws Exception
*/
public Map
Map
// 获取所有约束信息
String name = obj.toString();
String typeName = ((Class< >) GenUtils.getFieldValue(clazz, obj, TYPE)).getSimpleName();
String type = getSqlType(typeName);
int length = (Integer) GenUtils.getFieldValue(clazz, obj, LENGTH);
boolean index = (Boolean) GenUtils.getFieldValue(clazz, obj, INDEX);
String nullable = (Boolean) GenUtils.getFieldValue(clazz, obj, NULLABLE) == true "NULL" : "NOT NULL";
//默认值
Object def = GenUtils.getFieldValue(clazz, obj, DEFAULTS);
String defaults = def == null "" : " DEFAULT '" + def.toString() + "'";
// 如果长度为0,即没设长度,则提取默认值
if(length == 0) {
length = getDefaultLength(typeName);
}
resul