import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
/**
* @ClassName : DataTableCreateService
* @Description :
*/
@Service
public class DataTableCreateServiceImpl implements IDataTableCreateService {
/**
* Description : 创建表格
*
* @param connection
* @param tableName 表名称
* @param tableRemarks 表注释
* @param columnVos 字段信息
* @throws Exception
*/
@Override
public R createTable(Connection connection, String tableName, String tableRemarks, List<ColumnVo> columnVos) throws Exception {
try {
if (connection != null && !CollectionUtils.isEmpty(columnVos)) {
//判断表名是否重复
ResultSet tables = connection.getMetaData().getTables(null, null, tableName, new String[]{"TABLE", "VIEW"});
if (tables.next()) {
return R.fail("该表名已存在,请重新输入!");
}
tables.close();
String sql = "";
if (connection.getMetaData().getDriverName().toUpperCase().indexOf("MYSQL") != -1) {
sql = getMySqlCreate(tableName, tableRemarks, columnVos);
} else if (connection.getMetaData().getDriverName().toUpperCase().indexOf("SQLSERVER") != -1) {
sql = getSqlServerCreate(tableName, tableRemarks, columnVos);
} else if (connection.getMetaData().getDriverName().toUpperCase().indexOf("ORACLE") != -1) {
sql = getOracleCreate(tableName, tableRemarks, columnVos);
} else if (connection.getMetaData().getDriverName().toUpperCase().indexOf("HIVE") != -1) {
sql = getHiveCreate(tableName, tableRemarks, columnVos);
} else if (connection.getMetaData().getDriverName().toUpperCase().indexOf("PHOENIX") != -1) {
sql = getHbaseCreate(tableName, tableRemarks, columnVos);
}
Statement statement = connection.createStatement();
statement.execute(sql);
connection.close();
return R.success("新建表成功");
} else {
return R.fail("新建表方法参数空值异常");
}
} catch (Exception e) {
e.printStackTrace();
throw new Exception("创建表格出现异常!");
}
}
/**
* Description : 生成MySql的建表语句
*
* @param tableName 表名称
* @param tableRemarks 表注释
* @param columnVos 字段信息
* @return : java.lang.String
* @throws Exception
*/
public String getMySqlCreate(String tableName, String tableRemarks, List<ColumnVo> columnVos) throws Exception {
try {
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("create table " + tableName + " (");
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String columnType = columnVo.getColumnType();
Integer columnSize = columnVo.getColumnSize();
if ("INT".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " int " + "(" + columnSize + ") ");
} else if ("DOUBLE".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " double ");
} else if ("VARCHAR".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " varchar " + "(" + columnSize + ") ");
} else if ("DATETIME".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " datetime ");
}
Boolean isPrimary = columnVo.getPrimary();
String primary = "";
if (isPrimary != null && isPrimary) {
primary = " primary key ";
}
Boolean isNullable = columnVo.getNullable();
String nullable = "";
if (isNullable != null && !isNullable) {
nullable = " not null ";
}
String remarks = columnVo.getRemarks();
sqlBuffer.append(primary + nullable + " comment '" + remarks + "',");
}
String s = sqlBuffer.toString();
String sql = s.substring(0, s.length() - 1) + ") COMMENT='" + tableRemarks + "'";
return sql;
} catch (Exception e) {
e.printStackTrace();
throw new Exception("生成MySql的建表语句出现异常!");
}
}
/**
* Description : 生成SqlServer的建表语句
*
* @param tableName 表名称
* @param tableRemarks 表注释
* @param columnVos 字段信息
* @return : java.lang.String
* @throws Exception
*/
String getSqlServerCreate(String tableName, String tableRemarks, List<ColumnVo> columnVos) {
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("create table " + tableName + " (");
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String columnType = columnVo.getColumnType();
Integer columnSize = columnVo.getColumnSize();
String type = "";
if ("整数".equals(columnType)) {
type = "int";
sqlBuffer.append(columnName + " " + type + "(" + columnSize + ") ");
} else if ("小数".equals(columnType)) {
type = "float";
sqlBuffer.append(columnName + " " + type + " ");
} else if ("时间".equals(columnType)) {
type = "datetime";
sqlBuffer.append(columnName + " " + type + " ");
} else if ("字符串".equals(columnType)) {
type = "varchar";
sqlBuffer.append(columnName + " " + type + "(" + columnSize + ") ");
}
Boolean isPrimary = columnVo.getPrimary();
String primary = "";
if (isPrimary != null && isPrimary) {
primary = " primary key ";
}
Boolean isNullable = columnVo.getNullable();
String nullable = "";
if (isNullable != null && !isNullable) {
nullable = " not null ";
}
sqlBuffer.append(primary + nullable + ",");
}
String s = sqlBuffer.toString();
String sql = s.substring(0, s.length() - 1) + ")" + "\n" + "GO" + "\n ";
StringBuffer sqlBuffer1 = new StringBuffer();
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String remarks = columnVo.getRemarks();
sqlBuffer1.append("exec sp_addextendedproperty N'MS_Description', N'" + remarks + "', N'user', N'dbo', N'table', N'" + tableName + "', N'column', N'" + columnName + "' " + "\n" + "GO" + "\n ");
}
sqlBuffer1.append("exec sp_addextendedproperty N'MS_Description', N'" + tableRemarks + "', N'user', N'dbo', N'table', N'" + tableName + "', null, null" + "\n" + "GO" + "\n ");
String s1 = sql.concat(sqlBuffer1.toString());
return s1;
}
/**
* Description : 生成Oracle的建表语句
*
* @param tableName 表名称
* @param tableRemarks 表注释
* @param columnVos 字段信息
* @return : java.lang.String
* @throws Exception
*/
String getOracleCreate(String tableName, String tableRemarks, List<ColumnVo> columnVos) {
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("create table " + tableName + " (");
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String columnType = columnVo.getColumnType();
Integer columnSize = columnVo.getColumnSize();
String type = "";
if ("整数".equals(columnType)) {
type = "NUMBER";
sqlBuffer.append(columnName + " " + type + "(" + columnSize + ") ");
} else if ("小数".equals(columnType)) {
type = "NUMBER";
sqlBuffer.append(columnName + " " + type + " ");
} else if ("字符串".equals(columnType)) {
type = "VARCHAR2";
sqlBuffer.append(columnName + " " + type + "(" + columnSize + ") ");
} else if ("时间".equals(columnType)) {
type = "DATE";
sqlBuffer.append(columnName + " " + type + " ");
}
Boolean isPrimary = columnVo.getPrimary();
String primary = "";
if (isPrimary != null && isPrimary) {
primary = " primary key ";
}
Boolean isNullable = columnVo.getNullable();
String nullable = "";
if (isNullable != null && !isNullable) {
nullable = " not null ";
}
sqlBuffer.append(primary + nullable + ",");
}
String s = sqlBuffer.toString();
String sql = s.substring(0, s.length() - 1) + ");";
StringBuffer sqlBuffer1 = new StringBuffer();
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String remarks = columnVo.getRemarks();
sqlBuffer1.append("comment on column " + tableName + "." + columnName + " is '" + remarks + "';");
}
sqlBuffer1.append("comment on table " + tableName + " is '" + tableRemarks + "';");
String s1 = sql.concat(sqlBuffer1.toString());
return s1;
}
/**
* Description : 生成Hive的建表语句
*
* @param tableName 表名称
* @param tableRemarks 表注释
* @param columnVos 字段信息
* @return : java.lang.String
* @throws Exception
*/
public String getHiveCreate(String tableName, String tableRemarks, List<ColumnVo> columnVos) throws Exception {
try {
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("create table " + tableName + " (");
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String columnType = columnVo.getColumnType();
Integer columnSize = columnVo.getColumnSize();
if ("INT".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " int ");
} else if ("DOUBLE".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " double ");
} else if ("VARCHAR".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " varchar " + "(" + columnSize + ") ");
} else if ("DATETIME".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " datetime ");
} else if ("TIMESTAMP".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " timestamp ");
}
String remarks = columnVo.getRemarks();
sqlBuffer.append(" comment '" + remarks + "',");
}
String s = sqlBuffer.toString();
String sql = s.substring(0, s.length() - 1) + ") COMMENT '" + tableRemarks + "'";
return sql;
} catch (Exception e) {
e.printStackTrace();
throw new Exception("生成hive的建表语句出现异常!");
}
}
/**
* Description : 生成Hbase的建表语句
*
* @param tableName 表名称
* @param tableRemarks 表注释
* @param columnVos 字段信息
* @return : java.lang.String
* @throws Exception
*/
public String getHbaseCreate(String tableName, String tableRemarks, List<ColumnVo> columnVos) throws Exception {
try {
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("create table " + tableName + " (");
for (int i = 0; i < columnVos.size(); i++) {
ColumnVo columnVo = columnVos.get(i);
String columnName = columnVo.getColumnName();
String columnType = columnVo.getColumnType();
Integer columnSize = columnVo.getColumnSize();
if ("INT".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " BIGINT ");
} else if ("CHAR".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " char " + "(" + columnSize + ") ");
} else if ("DATE".equals(columnType.toUpperCase())) {
sqlBuffer.append(columnName + " date ");
}
Boolean isNullable = columnVo.getNullable();
String nullable = "";
if (isNullable != null && !isNullable) {
nullable = " not null ";
}
Boolean isPrimary = columnVo.getPrimary();
String primary = "";
if (isPrimary != null && isPrimary) {
primary = " primary key ";
}
String remarks = columnVo.getRemarks();
sqlBuffer.append(nullable + primary + " ,");
}
String s = sqlBuffer.toString();
String sql = s.substring(0, s.length() - 1) + ") ";
return sql;
} catch (Exception e) {
e.printStackTrace();
throw new Exception("生成hbase的建表语句出现异常!");
}
}
}