更新表操作 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; /** * 自动建表建索 |