1.创建表(DataTable 为表信息,包括数据库信息(DataBaseInfor ),字段信息(dataTable.getTableFieldInforList()))仅供参考
private static void createMySqlDataTable(DataTable dataTable) {
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
// 数据库连接URL,用户名和密码
String url = "jdbc:mysql://"+dataBaseInfor.getLinkAddress()+"/"+dataBaseInfor.getName();
String user = dataBaseInfor.getUserName();
String password = dataBaseInfor.getPassword();
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
Connection conn = DriverManager.getConnection(url, user, password);
// 创建Statement对象来执行SQL语句
Statement stmt = conn.createStatement();
// 要执行的SQL语句,创建新表
String sql = "CREATE TABLE IF NOT EXISTS `"+dataTable.getEnName()+"`(";
String majorKey = "";
List<DataTableFieldInfor> tableFieldInforList = dataTable.getTableFieldInforList();
if (ObjectUtils.isNotEmpty(tableFieldInforList)){
for (DataTableFieldInfor dataTableFieldInfor : tableFieldInforList){
sql = sql+"`"+dataTableFieldInfor.getFieldEnName()+"` ";
if (dataTableFieldInfor.getFieldType() != null || dataTableFieldInfor.getFieldType() != ""){
if (dataTableFieldInfor.getFieldType().equals("varchar")||dataTableFieldInfor.getFieldType().equals("char")){
sql = sql+dataTableFieldInfor.getFieldType()+"("+dataTableFieldInfor.getFieldLength()+") ";
}else if (dataTableFieldInfor.getFieldType().equals("float") || dataTableFieldInfor.getFieldType().equals("double")){
sql = sql+dataTableFieldInfor.getFieldType()+"("+dataTableFieldInfor.getFieldLength()+","+dataTableFieldInfor.getFieldAccuracy()+") ";
}
else {
sql = sql+dataTableFieldInfor.getFieldType() + " ";
}
}
if (dataTableFieldInfor.getRequiredFlag() == 1){
sql = sql + "NOT NULL ";
}
if (dataTableFieldInfor.getIncrementalFlag() ==2){
if (StringUtils.isNotEmpty(dataTableFieldInfor.getDefaultValue())){
sql = sql+"DEFAULT'"+ dataTableFieldInfor.getDefaultValue() + "'";
}else {
sql = sql+"DEFAULT NULL ";
}
}else {
sql = sql + "AUTO_INCREMENT ";
}
sql = sql + "COMMENT '"+dataTableFieldInfor.getFieldCnName()+"',";
if (dataTableFieldInfor.getMajorKeyFlag() == 1){
majorKey = majorKey+dataTableFieldInfor.getFieldEnName();
}
}
}
sql = sql +"PRIMARY KEY ("+majorKey+")";
sql = sql+")";
sql = sql +"ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='"+dataTable.getCnName()+"'";
System.out.println("执行sql:"+sql);
// 执行SQL语句
stmt.executeUpdate(sql);
// 关闭Statement和Connection
stmt.close();
conn.close();
System.out.println("Table created successfully");
} catch (Exception e) {
e.printStackTrace();
}
}
2.删除表
private static void deleteMySqlTable(DataTable dataTable) {
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
// 数据库连接URL,用户名和密码
String url = "jdbc:mysql://"+dataBaseInfor.getLinkAddress()+"/"+dataBaseInfor.getName();
String user = dataBaseInfor.getUserName();
String password = dataBaseInfor.getPassword();
// 表名
String tableName = dataTable.getEnName();
Connection conn = null;
Statement stmt = null;
try {
// 注册JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 打开连接
conn = DriverManager.getConnection(url, user, password);
// 执行SQL语句
stmt = conn.createStatement();
String sql = "DROP TABLE IF EXISTS " + tableName;
stmt.executeUpdate(sql);
System.out.println("Table dropped successfully");
} catch (ClassNotFoundException e) {
System.out.println("JDBC driver not found");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("SQLException: " + e.getMessage());
e.printStackTrace();
} finally {
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
3.修改表
主要根据字段的修改分为新增字段,删除字段,修改字段,写的比较乱。仅供参考
private void updateMySqlTable(DataTable dataTable) {
DataTable oldDataTable = dataTable.getOldDataTable();
if (!oldDataTable.getEnName().equals(dataTable.getEnName())){
String sql = "ALTER TABLE " +oldDataTable.getEnName()+" RENAME TO "+dataTable.getEnName();
sql(dataTable,sql);
}
if (!oldDataTable.getCnName().equals(dataTable.getCnName())){
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
String sql = "ALTER TABLE `"+dataBaseInfor.getName()+"`.`"+dataTable.getEnName()+ "` COMMENT = '"+dataTable.getCnName()+"`";
sql(dataTable,sql);
}
List<DataTableFieldInfor> list = dataTable.getUpdateTableFieldList();
Map<Integer,List<DataTableFieldInfor>> map=list.stream().collect(Collectors.groupingBy(DataTableFieldInfor::getSystemType));
if (ObjectUtils.isNotEmpty(map.get(3))){
deleteField(map.get(3),dataTable);
}
if (ObjectUtils.isNotEmpty(map.get(2))){
editField(map.get(2),dataTable);
}
if (ObjectUtils.isNotEmpty(map.get(1))){
addField(map.get(1),dataTable);;
}
}
private void updateOracleTable(DataTable dataTable) {
}
private void deleteField(List<DataTableFieldInfor> dataTableFieldInfors,DataTable dataTable) {
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
String sql = "ALTER TABLE `"+dataBaseInfor.getName()+"`.`"+dataTable.getEnName()+ "`";
for (DataTableFieldInfor dataTableFieldInfor : dataTableFieldInfors){
sql = sql + " DROP COLUMN `" + dataTableFieldInfor.getFieldEnName()+"`";
if (dataTableFieldInfor.getId() != dataTableFieldInfors.get(dataTableFieldInfors.size()-1).getId()){
sql = sql + ",";
}
}
System.out.println("执行sql:"+sql);
sql(dataTable,sql);
}
private void addField(List<DataTableFieldInfor> dataTableFieldInfors,DataTable dataTable) {
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
String sql = "ALTER TABLE `"+dataBaseInfor.getName()+"`.`"+dataTable.getEnName()+ "`";
for (DataTableFieldInfor dataTableFieldInfor : dataTableFieldInfors){
sql = sql + "ADD COLUMN `"+dataTableFieldInfor.getFieldEnName()+"` ";
//根据字段类型拼接
if (dataTableFieldInfor.getFieldType().equals("varchar")||dataTableFieldInfor.getFieldType().equals("char")){
sql = sql+dataTableFieldInfor.getFieldType()+"("+dataTableFieldInfor.getFieldLength()+") ";
}else if (dataTableFieldInfor.getFieldType().equals("float") || dataTableFieldInfor.getFieldType().equals("double")){
sql = sql+dataTableFieldInfor.getFieldType()+"("+dataTableFieldInfor.getFieldLength()+","+dataTableFieldInfor.getFieldAccuracy()+") ";
}
else {
sql = sql+dataTableFieldInfor.getFieldType() + " ";
}
//根据字段是否为空拼接
if (dataTableFieldInfor.getRequiredFlag() == 1){
sql = sql + "NOT NULL ";
}else {
sql = sql + "NULL ";
}
//根据字段是否默认值
if (dataTableFieldInfor.getIncrementalFlag() ==2){
if (StringUtils.isNotEmpty(dataTableFieldInfor.getDefaultValue())){
sql = sql+"DEFAULT'"+ dataTableFieldInfor.getDefaultValue() + "'";
}
}else {
//是否自增
sql = sql + "AUTO_INCREMENT ";
}
sql = sql + "COMMENT '"+dataTableFieldInfor.getFieldCnName()+"' ";
/*DataTableFieldInfor fieldInfor = new DataTableFieldInfor();
fieldInfor.setTableId(dataTableFieldInfor.getTableId());*/
List<DataTableFieldInfor> list = dataTable.getTableFieldInforList();
if (dataTableFieldInfor.getSort() == 1){
sql = sql + "FIRST";
}else {
sql = sql + "AFTER `"+list.get(dataTableFieldInfor.getSort()-2).getFieldEnName()+"`";
}
if (dataTableFieldInfors.stream().anyMatch(company -> company.getMajorKeyFlag() == 1)){
sql = sql + ",";
}else if (dataTableFieldInfor.getSort() < dataTableFieldInfors.size()+1){
sql = sql + ",";
}else {
sql = sql+";";
}
}
//是否新增主键
if (dataTableFieldInfors.stream().anyMatch(company -> company.getMajorKeyFlag() == 1)){
sql = sql + "DROP PRIMARY KEY";
DataTableFieldInfor fieldInfor = new DataTableFieldInfor();
fieldInfor.setTableId(dataTableFieldInfors.get(0).getTableId());
List<DataTableFieldInfor> list = dataTable.getTableFieldInforList();
sql = sql + "ADD PRIMARY KEY (";
List<DataTableFieldInfor> fieldInforList = new ArrayList<>();
for (DataTableFieldInfor dataTableFieldInfor : list){
if (dataTableFieldInfor.getMajorKeyFlag() ==1){
fieldInforList.add(dataTableFieldInfor);
}
}
for (DataTableFieldInfor dataTableFieldInfor : fieldInforList){
if (dataTableFieldInfor.getId() != fieldInforList.get(fieldInforList.size()).getId()){
sql= sql+"`"+dataTableFieldInfor.getFieldEnName()+"`,";
}else {
sql= sql+"`"+dataTableFieldInfor.getFieldEnName()+"`";
}
}
sql = sql+") USING BTREE;";
}
System.out.println("执行sql:"+sql);
sql(dataTable,sql);
}
private void editField(List<DataTableFieldInfor> dataTableFieldInfors,DataTable dataTable) {
for (DataTableFieldInfor dataTableFieldInfor : dataTableFieldInfors){
DataTableFieldInfor fieldInfor= dataTable.getOldTableFieldList().stream().filter(p -> p.getId().equals(dataTableFieldInfor.getId()))
.findFirst()
.orElse(null);
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
String sql = "ALTER TABLE `"+dataBaseInfor.getName()+"`.`"+dataTable.getEnName()+ "`";
if (!dataTableFieldInfor.getFieldEnName().equals(fieldInfor.getFieldEnName())){
sql = sql+"CHANGE COLUMN `" + fieldInfor.getFieldEnName() +"` `"+dataTableFieldInfor.getFieldEnName()+"`";
}else {
sql = sql + "MODIFY COLUMN `" + dataTableFieldInfor.getFieldEnName()+"`";
}
//根据字段类型拼接
if (dataTableFieldInfor.getFieldType().equals("varchar")||dataTableFieldInfor.getFieldType().equals("char")){
sql = sql+dataTableFieldInfor.getFieldType()+"("+dataTableFieldInfor.getFieldLength()+") ";
}else if (dataTableFieldInfor.getFieldType().equals("float") || dataTableFieldInfor.getFieldType().equals("double")){
sql = sql+dataTableFieldInfor.getFieldType()+"("+dataTableFieldInfor.getFieldLength()+","+dataTableFieldInfor.getFieldAccuracy()+") ";
}
else {
sql = sql+dataTableFieldInfor.getFieldType() + " ";
}
//根据字段是否为空拼接
if (dataTableFieldInfor.getRequiredFlag() == 1){
sql = sql + "NOT NULL ";
}else {
sql = sql + "NULL ";
}
//根据字段是否默认值
if (dataTableFieldInfor.getIncrementalFlag() ==2){
if (StringUtils.isNotEmpty(dataTableFieldInfor.getDefaultValue())){
sql = sql+"DEFAULT'"+ dataTableFieldInfor.getDefaultValue() + "'";
}
}else {
//是否自增
sql = sql + "AUTO_INCREMENT ";
}
sql = sql + "COMMENT '"+dataTableFieldInfor.getFieldCnName()+"' ";
List<DataTableFieldInfor> list = dataTable.getTableFieldInforList();
if (dataTableFieldInfor.getSort() == 1){
sql = sql + "FIRST;";
}else {
sql = sql + "AFTER `"+list.get(dataTableFieldInfor.getSort()-2).getFieldEnName()+"`;";
}
System.out.println("执行第"+dataTableFieldInfors.indexOf(dataTableFieldInfor)+1+"条sql:"+sql);
sql(dataTable,sql);
}
}
private void sql(DataTable dataTable,String sql){
DataBaseInfor dataBaseInfor = dataTable.getDataBaseInfor();
// 数据库连接URL,用户名和密码
String url = "jdbc:mysql://"+dataBaseInfor.getLinkAddress()+"/"+dataBaseInfor.getName();
String user = dataBaseInfor.getUserName();
String password = dataBaseInfor.getPassword();
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
Connection conn = DriverManager.getConnection(url, user, password);
// 创建Statement对象来执行SQL语句
Statement stmt = conn.createStatement();
// 执行SQL语句
stmt.executeUpdate(sql);
// 关闭Statement和Connection
stmt.close();
conn.close();
System.out.println("Table created successfully");
} catch (Exception e) {
e.printStackTrace();
}
}
3646

被折叠的 条评论
为什么被折叠?



