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