通过读取excel文件生成sql语句
jopen
9年前
package com.dj.dao.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class ExcelToSql { public static void main(String[] args) throws Exception { // ArrayList<String> tableNames = excelToSql(); //exceldel1(); /*ArrayList<String> tableNames = new ArrayList<String>(); tableNames.add("T_UBMP_SUPPLIEREXPERIENCEINFO"); copyFile(tableNames);*/ //getTables(); System.out.println("select name,remarks from sysibm.systables where type='T' and creator = 'UBMPOA' AND NAME LIKE 'T_UBMP\\_%\\_%' escape '\\' order by name asc"); SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式 System.out.println(df.format(new Date())); } @PersistenceContext private static EntityManager entityManager; public static void getTables() { Query query = entityManager .createNativeQuery("select name,remarks from sysibm.systables where type='T' and creator = 'UBMPOA' AND NAME LIKE 'T_UBMP_%'"); List result = query.getResultList(); System.out.println(result); System.out.println(((Object[])result.get(0))[0]); for(int index = 0; index < result.size(); index ++){ String tableName = ((Object[])result.get(index))[0].toString(); String tableNamedesc = ((Object[])result.get(index))[1].toString(); System.out.println(tableName+":"+tableNamedesc); } } public static void excelToSql() throws Exception{ jxl.Workbook readwb = null; FileOutputStream os = null; String file = "D:\\sanxia\\doc\\trunk\\新oa\\数据库设计\\已分配\\乌商项目管理平台表结构汇总1.xls"; String file2 = "D:\\sanxia\\doc\\trunk\\新oa\\数据库设计\\已分配\\乌商项目管理平台表结构汇总2.xls"; InputStream instream = new FileInputStream(file); readwb = Workbook.getWorkbook(instream); FileOutputStream os1 = new FileOutputStream(file2);// 创建一个输出流 WritableWorkbook writewb = Workbook.createWorkbook(os1); WritableSheet sheet1 = writewb.createSheet("汇总", 0); int rowhz = 0; // for (int sheetNum = 2; sheetNum < 5; sheetNum++) { for (int sheetNum = 1; sheetNum < readwb.getNumberOfSheets(); sheetNum++) { Sheet readsheet = readwb.getSheet(sheetNum); int rsRows = readsheet.getRows(); int colnum = readsheet.getColumns(); for(int row = 0; row < rsRows; row ++){ if(row == 0){ sheet1.mergeCells(0, rowhz, 5, rowhz); } for(int col = 0; col < colnum; col ++){ Cell str = readsheet.getCell(col, row); // CellFormat st = str.getCellFormat(); WritableFont font1 = new WritableFont(WritableFont.createFont("Microsoft Sans Serif"),9); WritableCellFormat cellFormat1 = new WritableCellFormat(font1); cellFormat1.setAlignment(Alignment.LEFT); cellFormat1.setBackground((jxl.format.Colour.LIGHT_TURQUOISE)); cellFormat1.setBorder(Border.ALL,BorderLineStyle.THIN); Label label = new Label(col, rowhz, str.getContents().toString(),cellFormat1); //Label label1 = new Label(col, rowhz, "123"); sheet1.addCell(label); } rowhz = rowhz +1; } System.out.println(sheetNum); rowhz = rowhz + 2; System.out.println(rowhz); } writewb.write(); os1.flush(); readwb.close(); try { if (writewb != null) writewb.close(); if (os1 != null) os1.close(); } catch (IOException e) { e.printStackTrace(); } /* * //利用已经创建的Excel工作薄,创建新的可写入的Excel工作薄 jxl.write.WritableWorkbook wwb * = Workbook.createWorkbook(new File( "F:/红楼人物1.xls"), readwb); * //读取第一张工作表 jxl.write.WritableSheet ws = wwb.getSheet(0); * //获得第一个单元格对象 jxl.write.WritableCell wc = ws.getWritableCell(0, * 0); //判断单元格的类型, 做出相应的转化 if (wc.getType() == CellType.LABEL) { * Label l = (Label) wc; l.setString("新姓名"); } //写入Excel对象 * wwb.write(); wwb.close(); */ } public static ArrayList<String> exceldel1(){ ArrayList<String> tableNames = new ArrayList<String>(); jxl.Workbook readwb = null; try { System.out.println("开始读取"); // 构建Workbook对象, 只读Workbook对象 // 直接从本地文件创建Workbook // InputStream instream = new FileInputStream("D:\\sanxia\\doc\\trunk\\新oa\\数据库设计\\已分配\\乌商项目管理平台表结构汇总xsy.xls"); InputStream instream = new FileInputStream("D:\\sanxia\\doc\\trunk\\新oa\\数据库设计\\待审查\\张维科\\数据库最新设计xsy.xls"); readwb = Workbook.getWorkbook(instream); String path = "D:\\sanxia\\doc\\trunk\\新oa\\数据库设计\\待审查\\张维科\\20160112.sql"; for (int sheetNum = 0; sheetNum < readwb.getNumberOfSheets(); sheetNum++) { // Sheet的下标是从0开始 // 获取第一张Sheet表 Sheet readsheet = readwb.getSheet(sheetNum); // 获取Sheet表中所包含的总列数 int rsColumns = readsheet.getColumns(); // 获取Sheet表中所包含的总行数 int rsRows = readsheet.getRows(); // 获取指定单元格的对象引用 String sql = ""; String tableName = ""; String PK = ""; for (int i = 0; i < rsRows; i++) { Cell[] str = readsheet.getRow(i); if (i == 0) { tableName = str[0].getContents().toString(); int startIndex = tableName.indexOf("("); if (-1 == startIndex) { startIndex = tableName.indexOf("("); } int endIndex = tableName.indexOf(")"); if (-1 == endIndex) { endIndex = tableName.indexOf(")"); } // System.out.println(tableName+":"+startIndex+"|"+endIndex); tableName = tableName.substring(startIndex + 1, endIndex); if (tableName == null || "".equals(tableName.trim())) { System.out.println("表名未知,请检查"); break; } tableName = tableName.toUpperCase(); tableNames.add(tableName); System.out.println("tableName:" + tableName); //sql = sql + "drop table " + tableName + ";\n"; sql = sql + "\nCREATE TABLE " + tableName; sql = sql + "\n(\n"; } if (i == 1) { continue; } if (i >= 2) { if (i < 6) { if (str[5].getContents().toString().contains("PK")) { PK = PK + "," + str[1].getContents().toString(); } } String colName = String.format("%-30s", str[1] .getContents().toString()); String colSize = String.format("%-20s", str[3] .getContents().toString()); if ("M".equals(str[4].getContents().toString()) || "m".equals(str[4].getContents().toString()) || "y".equals(str[4].getContents().toString()) || "Y".equals(str[4].getContents().toString())) { sql = sql + "\t" + colName + " " + colSize + " NOT NULL ,\n"; } else { sql = sql + "\t" + colName + " " + colSize + " ,\n"; } } } if (PK.length() < 1) { System.out.println("表主键无主键,请自行添加,注意最后一列去掉逗号"); } else { sql = sql + "\t\t PRIMARY KEY (" + PK.substring(1) + ") \n"; } sql = sql + ");\n"; // sql = sql + // "CREATE INDEX "+tableName+".INDEX1 ON "+tableName+"(KEY1,KEY2); --请自行替换KEY1、KEY2\n"; for (int i = 0; i < rsRows; i++) { Cell[] str = readsheet.getRow(i); if (i == 0) { String tableNamePre = str[0].getContents().toString(); int startIndex = tableNamePre.indexOf("("); if (-1 == startIndex) { startIndex = tableNamePre.indexOf("("); } tableNamePre = tableNamePre.substring(0, startIndex); ; if (tableNamePre == null || "".equals(tableNamePre.trim())) { System.out.println("表名称未知,请检查"); break; } String comment = tableNamePre; sql = sql + "COMMENT ON TABLE " + tableName + " IS '" + comment + "';\n"; } if (i == 1) { continue; } if (i >= 2) { String remark = str[5].getContents().toString(); remark = remark.replace("'", ""); remark = remark.replace("\"", ""); remark = remark.replace(",", ""); remark = remark.replace(",", ""); remark = remark.replace("。", ""); remark = remark.replace(".", ""); String comment = ""; if ("".equals(remark.trim())) { comment = str[2].getContents().toString(); } else { comment = str[2].getContents().toString() + ": " + remark; } sql = sql + "COMMENT ON COLUMN " + tableName + "." + str[1].getContents().toString() + " IS '" + comment + "';\n"; } } sql = sql.toUpperCase(); String pathbak = "D:\\sanxia\\doc\\trunk\\新oa\\系统设计\\数据库设计\\sql\\compare\\"; File file = new File(path); //File file = new File(path + tableName + ".sql"); // if(file.exists()){ // file = new File(pathbak + tableName + ".sql"); // System.err.println(tableName+"文件已存在,请在比较文件中查看"); // } Writer outTxt = new OutputStreamWriter(new FileOutputStream( file, true), "unicode"); outTxt.write(sql); outTxt.close(); } /* * //利用已经创建的Excel工作薄,创建新的可写入的Excel工作薄 jxl.write.WritableWorkbook wwb * = Workbook.createWorkbook(new File( "F:/红楼人物1.xls"), readwb); * //读取第一张工作表 jxl.write.WritableSheet ws = wwb.getSheet(0); * //获得第一个单元格对象 jxl.write.WritableCell wc = ws.getWritableCell(0, * 0); //判断单元格的类型, 做出相应的转化 if (wc.getType() == CellType.LABEL) { * Label l = (Label) wc; l.setString("新姓名"); } //写入Excel对象 * wwb.write(); wwb.close(); */ } catch (Exception e) { e.printStackTrace(); } finally { readwb.close(); } return tableNames; } /** * 复制单个文件 * * @param oldPath * String 原文件路径 如:c:/fqf.txt * @param newPath * String 复制后路径 如:f:/fqf.txt * @return boolean */ public static void copyFile(ArrayList<String> tableNames) { String path = "F:\\wlmq_manage\\workspace\\ubmpoa\\src\\com\\dj\\action\\uccb\\projectBuild\\"; String sourceFile = "BuildreqAction.java"; File modActionFile = new File(path+sourceFile); if(!modActionFile.exists()){ System.out.print("原Action文件不存在"); return; } for(String tableName:tableNames){ try { String beanName = tableName.substring(7,8).toUpperCase()+tableName.substring(8).toLowerCase(); String newFileName = beanName+"Action.java"; //InputStream inStream = new FileInputStream(path+sourceFile); // 读入原文件 //FileOutputStream fs = new FileOutputStream(path+newFileName); FileReader fr=new FileReader(path+sourceFile); BufferedReader br=new BufferedReader(fr); FileWriter write = new FileWriter(path+newFileName) ; while(br.readLine()!=null){ String s=br.readLine(); System.out.println(s); write.write(s+"\n"); /* if(s == null ){ continue; }else if("".equals(s.trim())){ write.write(s+"\n"); }else{ write.write(s.replace("Buildreq", beanName)+"\n"); }*/ } br.close(); fr.close(); write.close(); } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); } } } }