java-基於excle生成建表語句

1、jar:https://repo1.maven.org/maven2/   網上查詢jxl-2.6.jar屬於哪個包下的jar 去鏈接中下載

2、excle格式

 

 

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();
    }



}

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章