设为首页 加入收藏

TOP

反射+枚举+freemarker,自动生成实体类,自动建表建索引 之建表建索引,注解和DatabaseMetaData 获取信息 (八)
2014-11-24 11:54:45 】 浏览:2506
Tags:反射 枚举 freemarker 自动生成 实体 自动 索引 注解 DatabaseMetaData 获取 信息
更新表操作
Statement st = con.createStatement();
st.executeUpdate(sql.toString());
st.close();

// 建索引
checkCreateIndex(con, tableName, clazz);
}

// TODO 数据库连接方面需要改进
private static Connection getDBConnection(String driver, String urlDB, String user, String pwd) throws Exception {
// 连接MYSQL数据库
Class.forName(driver);
Connection conn = DriverManager.getConnection(urlDB, user, pwd);

return conn;
}

/**
* 根据配置源文件夹检查建数据表
*/
public void genDB(Connection conn) {
try {
// 获取源文件夹下的所有类
Set> sources = PackageClass.find(sourceDir);

// 遍历所有类,取出有注解的生成实体类
for(Class< > clazz : sources) {
// 过滤没有EntityConfig注解的类, 并建表
if(clazz.isAnnotationPresent(EntityConfig.class)) {
checkAndCreat(clazz, conn);
}
}

// 关闭连接
conn.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* 检查并建表或更新表结构
* @param clazz
* @throws Exception
*/
public void checkAndCreat(Class< > clazz, Connection conn) throws Exception {

// 获取表的信息
String catalog = null;
String schema = "%";
String tableName = GenUtils.getTableName(clazz);
String[] types = new String[] { "TABLE" };
DatabaseMetaData dBMetaData = conn.getMetaData();

// 从databaseMetaData获取表信息
ResultSet tableSet = dBMetaData.getTables(catalog, schema, tableName, types);

// 如果表不存在, 则建表
if (!tableSet.next()) {
createTable(conn, tableName, clazz);
} else { //表存在, 则更新表
updateTable(conn, tableName, clazz);
}

// 关闭数据库连接
tableSet.close();
}

public static void main(String[] args) throws Exception {
args = new String[] {"com.test.testentity"};
String sourceDir = args[0];

String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/game";
String user = "root";
String pwd = "";

Connection conn = getDBConnection(driver, url, user, pwd);

GenDB db = new GenDB(sourceDir);
db.genDB(conn);
}

}

package com.test.common;

import static com.test.common.EntityConfigData.DEFAULTS;
import static com.test.common.EntityConfigData.INDEX;
import static com.test.common.EntityConfigData.LENGTH;
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;
/**
* 自动建表建索

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目