java 生成mysql表结构图_JAVA数据库建表工具类

这个工具类能根据输入的数据生成对应的MySQL创建表语句,支持主键判断和注释添加,适用于数据库建表自动化。
摘要由CSDN通过智能技术生成

packagecom.test.word;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;/*** 数据库建表工具类

*@authorxieh 2019/11/27

**/

public classSQLTableUtil {//private String mysql = "MYSQL";//private String mssql = "MSSQL";//private String oracle = "ORACLE";//private String psql = "PSQL";

/*** MySQL数据库创建表SQL语句生成

*@paramlistSqlFiled

*@return

*/

public static String createMYSQL(List>listSqlFiled){if(listSqlFiled != null && listSqlFiled.size()>0){

List priKeyArray = new ArrayList();//主键集合

StringBuilder sqlStr = newStringBuilder();//获取第一个map,存在表名

Map mapFirst = listSqlFiled.get(0);/*int countMapFirst = 0;// 控制第一行的表名和表注释遍历次数

for(Map.Entry entry:mapFirst.entrySet()){

if(countMapFirst == 0){

sqlStr.append("DROP TABLE IF EXISTS `"+ entry.getValue() +"`;\n");

sqlStr.append("CREATE TABLE `"+ entry.getValue() +"` (\n");

}

}*/sqlStr.append("DROP TABLE IF EXISTS `"+ mapFirst.get("c0") +"`;\n");

sqlStr.append("CREATE TABLE `"+ mapFirst.get("c0") +"` (\n");int length =listSqlFiled.size();//遍历list集合

for(int i = 1; i < length; i ++){//遍历map集合

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append("`"+ map.get("c1") +"`\t "+ map.get("c2") +"\t");//是否为主键并且主键不能为空

if(map.get("c3").equalsIgnoreCase("Y")){

priKeyArray.add(map.get("c1"));

sqlStr.append("NOT NULL COMMENT '"+map.get("c5")+"',\n");//表示结束了到最后一行了,并且只有一个主键

if(i >= length - 1 && priKeyArray.size() == 1){//只有一个主键时

sqlStr.append("PRIMARY KEY (`"+ priKeyArray.get(0) +"`)\n");

sqlStr.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8;");//表示到最后一行了,并且存在多个主键

}else if(i >= length - 1 && priKeyArray.size() > 1){//多个主键时

sqlStr.append("PRIMARY KEY (");//遍历主键

for(int k = 0; k < priKeyArray.size(); k ++){//到最后一个主键时

if(k == priKeyArray.size() - 1){

sqlStr.append("`"+ priKeyArray.get(k) +"`) USING BTREE \n");

}else{

sqlStr.append("`"+ priKeyArray.get(k) +"`,");

}

}

sqlStr.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8;");

}//非主键,直接判断是否允许为空

}else{//表示没有主键,并且到最后一个了

if(priKeyArray.size() <=0 && i >= length - 1){if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append("DEFAULT NULL COMMENT '"+map.get("c5")+"'\n");

}else{

sqlStr.append("NOT NULL COMMENT '"+map.get("c5")+"'\n");

}

sqlStr.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8;");//表示有主键,并且是到最后一行了

}else if(priKeyArray.size() >0 && i >= length - 1){if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append("DEFAULT NULL COMMENT '"+map.get("c5")+"',\n");

}else{

sqlStr.append("NOT NULL COMMENT '"+map.get("c5")+"',\n");

}//表示只有一个主键

if(priKeyArray.size() == 1){

sqlStr.append("PRIMARY KEY (`"+ priKeyArray.get(0) +"`)\n");

sqlStr.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8;");//表示有多个主键

}else{

sqlStr.append("PRIMARY KEY (");//遍历主键

for(int k = 0; k < priKeyArray.size(); k ++){//到最后一个主键时

if(k == priKeyArray.size() - 1){

sqlStr.append("`"+ priKeyArray.get(k) +"`) USING BTREE \n");

}else{

sqlStr.append("`"+ priKeyArray.get(k) +"`,");

}

}

sqlStr.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8;");

}//没有到最后一行继续追加

}else{if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append("DEFAULT NULL COMMENT '"+map.get("c5")+"',\n");

}else{

sqlStr.append("NOT NULL COMMENT '"+map.get("c5")+"',\n");

}

}

}//}//for end

returnsqlStr.toString();

}else{return "";

}

}/*** sqlserver数据库创建表SQL语句

*@paramlistSqlFiled

*@return

*/

public static String createMSSQL(List>listSqlFiled){if(listSqlFiled != null && listSqlFiled.size()>0){

StringBuilder sqlStr= newStringBuilder();//获取第一个map,存在表名

Map mapFirst = listSqlFiled.get(0);

sqlStr.append("IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].["+ mapFirst.get("c0") +"]') AND type IN ('U'))\n");

sqlStr.append("DROP TABLE [dbo].["+ mapFirst.get("c0") +"]\n");

sqlStr.append("GO\n");

sqlStr.append("CREATE TABLE "+ mapFirst.get("c0") +" (\n");int length =listSqlFiled.size();//遍历list集合:生成基本表结构阶段

for(int i = 1; i < length; i ++){//遍历map集合

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append("["+ map.get("c1") +"]\t "+ map.get("c2") +"\t");//是否为主键并且主键不能为空

if(map.get("c3").equalsIgnoreCase("Y")){if(i >= length - 1){//表示最后一个并且是主键

sqlStr.append("primary key NOT NULL\n");

sqlStr.append(")");

}else{

sqlStr.append("primary key NOT NULL ,\n");

}//非主键,直接判断是否允许为空

}else{if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

if(i >= length -1){//表示允许为空并且是最后一个

sqlStr.append("DEFAULT NULL\n");

sqlStr.append(")");

}else{//表示允许为空继续追加

sqlStr.append("DEFAULT NULL ,\n");

}

}else{//不允许为空

if(i >= length -1){//表示不允许为空并且是最后一个

sqlStr.append("NOT NULL\n");

sqlStr.append(")");

}else{//表示不允许为空继续追加

sqlStr.append("NOT NULL ,\n");

}

}

}//}//for end基本表结构生成完成//开始追加注释阶段

sqlStr.append("\n");for(int i = 1; i < length; i ++){

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append("EXEC sp_addextendedproperty\n");

sqlStr.append("'MS_Description', N'"+ map.get("c5") +"',\n");

sqlStr.append("'SCHEMA', N'dbo',\n");

sqlStr.append("'TABLE', N'"+ mapFirst.get("c0") +"',\n");

sqlStr.append("'COLUMN', N'"+ map.get("c1") +"'\n");

sqlStr.append("GO\n");

sqlStr.append("\n");

}returnsqlStr.toString();

}else{return "";

}

}/*** Oracle数据创建表SQL语句

*@paramlistSqlFiled

*@paramdbUserName

*@return

*/

public static String createORACLE(List>listSqlFiled,String dbUserName){if(listSqlFiled != null && listSqlFiled.size()>0){

List priKeyArray = new ArrayList();//主键集合

StringBuilder sqlStr = newStringBuilder();//获取第一个map,存在表名

Map mapFirst = listSqlFiled.get(0);

sqlStr.append("create table "+ dbUserName +"."+ mapFirst.get("c0") +"(\n");int length =listSqlFiled.size();//遍历list集合

for(int i = 1; i < length; i ++){//遍历map集合

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append(""+ map.get("c1") +"\t "+ map.get("c2") +"\t");//是否为主键并且主键不能为空

if(map.get("c3").equalsIgnoreCase("Y")){

priKeyArray.add(map.get("c1"));

sqlStr.append("NOT NULL,\n");//表示结束了到最后一行了,并且只有一个主键

if(i >= length - 1 && priKeyArray.size() == 1){//只有一个主键时

sqlStr.append("PRIMARY KEY ("+ priKeyArray.get(0) +")\n");

sqlStr.append(");\n");//表示到最后一行了,并且存在多个主键

}else if(i >= length - 1 && priKeyArray.size() > 1){//多个主键时

sqlStr.append("PRIMARY KEY (");//遍历主键

for(int k = 0; k < priKeyArray.size(); k ++){//到最后一个主键时

if(k == priKeyArray.size() - 1){

sqlStr.append(""+ priKeyArray.get(k) +")\n");

}else{

sqlStr.append(""+ priKeyArray.get(k) +",");

}

}

sqlStr.append(");\n");

}//非主键,直接判断是否允许为空

}else{//表示没有主键,并且到最后一个了

if(priKeyArray.size() <=0 && i >= length - 1){if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append("\n");

}else{

sqlStr.append("NOT NULL\n");

}

sqlStr.append(");\n");//表示有主键,并且是到最后一行了

}else if(priKeyArray.size() >0 && i >= length - 1){if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append(",\n");

}else{

sqlStr.append("NOT NULL,\n");

}//表示只有一个主键

if(priKeyArray.size() == 1){

sqlStr.append("PRIMARY KEY ("+ priKeyArray.get(0) +")\n");

sqlStr.append(");\n");//表示有多个主键

}else{

sqlStr.append("PRIMARY KEY (");//遍历主键

for(int k = 0; k < priKeyArray.size(); k ++){//到最后一个主键时

if(k == priKeyArray.size() - 1){

sqlStr.append(""+ priKeyArray.get(k) +")\n");

}else{

sqlStr.append(""+ priKeyArray.get(k) +",");

}

}

sqlStr.append(");\n");

}//没有到最后一行继续追加

}else{if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append(",\n");

}else{

sqlStr.append("NOT NULL,\n");

}

}

}//}//for end

sqlStr.append("\n");//添加字段注释

for(int i = 1; i < length; i ++){//遍历map集合

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append("comment on column "+ dbUserName +"."+ mapFirst.get("c0") +"."+ map.get("c1")+" is '"+ map.get("c5")+"';\n");

}returnsqlStr.toString();

}else{return "";

}

}/*** PostgreSQL数据库创建表SQL语句

*@paramlistSqlFiled

*@return

*/

public static String createPSQL(List>listSqlFiled){if(listSqlFiled != null && listSqlFiled.size()>0){

List priKeyArray = new ArrayList();//主键集合

StringBuilder sqlStr = newStringBuilder();//获取第一个map,存在表名

Map mapFirst = listSqlFiled.get(0);

sqlStr.append("create table "+ mapFirst.get("c0") +"(\n");int length =listSqlFiled.size();//遍历list集合

for(int i = 1; i < length; i ++){//遍历map集合

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append(""+ map.get("c1") +"\t "+ map.get("c2") +"\t");//是否为主键并且主键不能为空

if(map.get("c3").equalsIgnoreCase("Y")){

priKeyArray.add(map.get("c1"));

sqlStr.append("NOT NULL,\n");//表示结束了到最后一行了,并且只有一个主键

if(i >= length - 1 && priKeyArray.size() == 1){//只有一个主键时

sqlStr.append("PRIMARY KEY ("+ priKeyArray.get(0) +")\n");

sqlStr.append(");\n");//表示到最后一行了,并且存在多个主键

}else if(i >= length - 1 && priKeyArray.size() > 1){//多个主键时

sqlStr.append("PRIMARY KEY (");//遍历主键

for(int k = 0; k < priKeyArray.size(); k ++){//到最后一个主键时

if(k == priKeyArray.size() - 1){

sqlStr.append(""+ priKeyArray.get(k) +")\n");

}else{

sqlStr.append(""+ priKeyArray.get(k) +",");

}

}

sqlStr.append(");\n");

}//非主键,直接判断是否允许为空

}else{//表示没有主键,并且到最后一个了

if(priKeyArray.size() <=0 && i >= length - 1){if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append("\n");

}else{

sqlStr.append("NOT NULL\n");

}

sqlStr.append(");\n");//表示有主键,并且是到最后一行了

}else if(priKeyArray.size() >0 && i >= length - 1){if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append(",\n");

}else{

sqlStr.append("NOT NULL,\n");

}//表示只有一个主键

if(priKeyArray.size() == 1){

sqlStr.append("PRIMARY KEY ("+ priKeyArray.get(0) +")\n");

sqlStr.append(");\n");//表示有多个主键

}else{

sqlStr.append("PRIMARY KEY (");//遍历主键

for(int k = 0; k < priKeyArray.size(); k ++){//到最后一个主键时

if(k == priKeyArray.size() - 1){

sqlStr.append(""+ priKeyArray.get(k) +")\n");

}else{

sqlStr.append(""+ priKeyArray.get(k) +",");

}

}

sqlStr.append(");\n");

}//没有到最后一行继续追加

}else{if(map.get("c4").equalsIgnoreCase("Y")){//允许为空

sqlStr.append(",\n");

}else{

sqlStr.append("NOT NULL,\n");

}

}

}//}//for end

sqlStr.append("\n");//添加字段注释

for(int i = 1; i < length; i ++){//遍历map集合

Map map =listSqlFiled.get(i);if(map.size() == 0){//此处判断不准确,最好的办法就是把excle表的底部多余的行右键删除掉

System.out.println("SQL语句不准确,请把excle表底部多余的行右键删除掉!");continue;

}

sqlStr.append("comment on column "+ mapFirst.get("c0") +"."+ map.get("c1")+" is '"+ map.get("c5")+"';\n");

}returnsqlStr.toString();

}else{return "";

}

}/*** 测试

*@paramargs*/

public static voidmain(String[] args) {try{//测试MySQL数据库

List> excelXReadMYSQL = ExcelUtil.excelXRead("F:/cs.xlsx",0);

System.out.println(createMYSQL(excelXReadMYSQL));//测试SQLSERVER数据库

List> excelXReadMSSQL = ExcelUtil.excelXRead("F:/cs.xlsx",1);

System.out.println(createMSSQL(excelXReadMSSQL));//测试Oracle数据库

List> excelXReadORCL = ExcelUtil.excelXRead("F:/cs.xlsx",2);

System.out.println(createORACLE(excelXReadORCL,"SCOTT"));//测试PostgreSQL数据库

List> excelXRead = ExcelUtil.excelXRead("F:/cs.xlsx",3);

System.out.println(createPSQL(excelXRead));

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值