java 执行建表语句_java-基于excle生成建表语句

1、jar:https://repo1.maven.org/maven2/   网上查询jxl-2.6.jar属于哪个包下的jar 去链接中下载

2、excle格式

c5cf396441557af423d1b31101b7970b.png

3、执行代码

import java.io.File;

import java.io.PrintWriter;

import java.util.Date;

import jxl.Sheet;

import jxl.Workbook;

public class Main {

public static void main(String[] args) throws Exception {

File file = new File("D:\\aaa.xls");

Workbook wb = Workbook.getWorkbook(file);

Sheet[] sheets = wb.getSheets();

System.out.println("当前文件夹的sheet数量" + sheets.length);

Date dateStart = new Date();

PrintWriter writer = new PrintWriter("D:\\result.sql") ;

for (int i = 1; i < sheets.length; i++) {

Sheet sheet = wb.getSheet(i);

String createstr = createstatement(sheet);

writer.write(createstr);

}

writer.close();

Date dateEnd = new Date();

System.out.println("生成完毕,一共用时:"+(dateEnd.getTime()-dateStart.getTime())/1000+"秒");

}

// 生成建表语句的方法

public static String createstatement(Sheet sheet) {

// CREATE TABLE `NewTable` (

// `id` int NULL DEFAULT NULL COMMENT '中文id' ,

// `name` varchar(10) NULL DEFAULT 'wjw' COMMENT '名字' ,

// `age` decimal(5,2) NOT NULL DEFAULT 5.12 COMMENT '年龄'

// )

// COMMENT='测试';

StringBuffer bodysb = new StringBuffer(); // 建表语句的表头和结尾注释不分

StringBuffer fldsb = new StringBuffer(); // 字段部分

StringBuffer commentsb = new StringBuffer(); // 表中文名

StringBuffer partitionsb = new StringBuffer(); // 分区字段部分

bodysb.append("-- 建表语句"+sheet.getCell(2, 0).getContents()+": \r\n create table ");

bodysb.append(sheet.getCell(1, 0).getContents());

// 表头部分

bodysb.append(" (\r\n");

// 表中文名

commentsb.append("\r\ncomment '" + sheet.getCell(2, 0).getContents() + "';\r\n\n\n\n");

// 字段部分

for (int i = 2; i < sheet.getRows(); i++) {

// 首行处理

if (i == 2) {

fldsb.append(" " + sheet.getCell(0, 2).getContents() + " " + sheet.getCell(1, 2).getContents());

String isNullVal = sheet.getCell(2, 2).getContents();

String defaultVal = sheet.getCell(3, 2).getContents();

if ("N".equals(isNullVal.toUpperCase())) { //不允许为null

fldsb.append(" NOT NULL");

if (!"".equals(defaultVal)) { //存在默认

fldsb.append(" DEFAULT '" + defaultVal + "'");

}

} else {

fldsb.append(" NULL");

}

if (!"".equals(sheet.getCell(4, 2).getContents())) {

fldsb.append(" comment '" + sheet.getCell(4, 2).getContents() + "',\r\n");

}else{

fldsb.append(",\r\n");

}

} else if (i > 2 && i < sheet.getRows() - 1) {

for (int j = 0; j <= 4; j++) {

switch (j) {

case 0:

fldsb.append(" " + sheet.getCell(j, i).getContents());

break;

case 1:

fldsb.append(" " + sheet.getCell(j, i).getContents());

break;

case 2:

String isNullVal = sheet.getCell(j, i).getContents();

int addj = j + 1;//将默认值一并处理

String defaultVal = sheet.getCell(addj, i).getContents();

if ("N".equals(isNullVal.toUpperCase())) { //不允许为null

fldsb.append(" NOT NULL");

if (!"".equals(defaultVal)) { //存在默认

fldsb.append(" DEFAULT '" + defaultVal + "'");

}

} else {

fldsb.append(" NULL");

}

break;

case 3:

break;

case 4:

if (!"".equals(sheet.getCell(j, i).getContents())) {

fldsb.append(" comment '" + sheet.getCell(j, i).getContents() + "',\r\n");

}else{

fldsb.append(",\r\n");

}

break;

default:

break;

}

}

} else {

fldsb.append(" " + sheet.getCell(0, sheet.getRows() - 1).getContents() + " " + sheet.getCell(1, sheet.getRows() - 1).getContents());

String isNullVal = sheet.getCell(2, sheet.getRows() - 1).getContents();

String defaultVal = sheet.getCell(3, sheet.getRows() - 1).getContents();

if ("N".equals(isNullVal.toUpperCase())) { //不允许为null

fldsb.append(" NOT NULL");

if (!"".equals(defaultVal)) { //存在默认

fldsb.append(" DEFAULT '" + defaultVal + "'");

}

} else {

fldsb.append(" NULL");

}

fldsb.append(" comment '" + sheet.getCell(4, sheet.getRows() - 1).getContents() + "'\r\n)");

}

}

// 合并结果集

StringBuffer result = new StringBuffer();

result = bodysb.append(fldsb).append(commentsb).append(partitionsb);

return result.toString();

}

}

生成结果:

47d4744cf1840b86d880074eb26e1698.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值