当前位置: 首页 > news >正文

通过读取excel文件生成sql语句

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

转载于:https://my.oschina.net/u/2540218/blog/602464

相关文章:

  • 指针知识梳理5-字符串与指针,程序内存总结
  • 使用360浏览器访问字体逆时针旋转90度的问题
  • Shell脚本实现自动修改IP地址
  • 参数的排列组合
  • 在当今快节奏的软件更迭当中,我们是否还需要进行系统的学习?
  • JSTL截取字符串
  • Java开发相关配置
  • Java BIO、NIO、AIO-------转载
  • JSPatch
  • RSA加密的测试demo
  • 用 Python 开发自动化测试脚本
  • 运用.net core配合VS 2015制作nuget包
  • linux shell数据重定向(输入重定向与输出重定向)详细分析 上(转)
  • PHP开发学习门户改版效果图投票
  • 收到云栖社区发的淘公仔礼物
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 奇技淫巧
  • Java的Interrupt与线程中断
  • js学习笔记
  • Making An Indicator With Pure CSS
  • Solarized Scheme
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 计算机在识别图像时“看到”了什么?
  • 你对linux中grep命令知道多少?
  • Semaphore
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #Linux(帮助手册)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (4)(4.6) Triducer
  • (c语言)strcpy函数用法
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (论文阅读11/100)Fast R-CNN
  • (排序详解之 堆排序)
  • (四)汇编语言——简单程序
  • (转)视频码率,帧率和分辨率的联系与区别
  • (轉)JSON.stringify 语法实例讲解
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .mysql secret在哪_MySQL如何使用索引
  • .Net CF下精确的计时器
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NetCore项目nginx发布
  • .net经典笔试题
  • [ Linux ] Linux信号概述 信号的产生
  • [ NOI 2001 ] 食物链
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [C++]Leetcode17电话号码的字母组合
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码