excel转换成oracle建表脚本

时间:2023-03-10 02:23:28
excel转换成oracle建表脚本
 package excel2sql;

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row; public class Excel2Sql { private HSSFWorkbook workbook;// 工作簿 /**
* 构造器-获取工作簿
* @param file
*/
public Excel2Sql(File file) {
try {
// 获取工作薄workbook
workbook = new HSSFWorkbook(new FileInputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 获取sheet中所有数据
* @param sheetNumber
* @return
*/
private List<List<Object>> getSheetDatas(int sheetNumber) { //sheet中数据结果集
List<List<Object>> result = new ArrayList<List<Object>>(); // 获得指定的sheet
HSSFSheet sheet = workbook.getSheetAt(sheetNumber); // 获得sheet总行数
int rowCount = sheet.getLastRowNum(); if (rowCount < 1) {
return result;
} // 遍历行row
for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) {
// 获得行对象
HSSFRow row = sheet.getRow(rowIndex);
if (null != row) {
List<Object> rowData = new ArrayList<Object>();
// 获取对应行单元格总数
int cellCount = row.getLastCellNum();
// 遍历列cell
for (int cellIndex = 0; cellIndex < cellCount; cellIndex++) {
//Missing cells are returned as null, Blank cells are returned as normal
HSSFCell cell = row.getCell(cellIndex, Row.RETURN_NULL_AND_BLANK);
// 获得指定单元格中的数据
Object cellValue = this.getCellValue(cell); rowData.add(cellValue);
}
result.add(rowData);
}
} return result;
} /**
* 获取cell值
* @param cell
* @return
*/
private Object getCellValue(HSSFCell cell) {
Object result = null;
if (cell != null) {
// 单元格类型:Numeric:0;String:1;Formula:2;Blank:3;Boolean:4;Error:5
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
result = cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
result = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_FORMULA:
result = cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
result = null;
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
result = cell.getBooleanCellValue();
break;
case HSSFCell.CELL_TYPE_ERROR:
result = null;
break;
}
}
return result;
} /**
* excel格式转换成建表脚本
* @param tableName 表名
* @param tableComment 表注释
* @return SQL 建库脚本
*/
public String excel2Sql(String tableName, String tableComment) {
//获取sheet数据
List<List<Object>> datas = this.getSheetDatas(0);
//主键
String primary = "";
//字段列
int column = 0;
//类型列
int type = 1;
//是否为空列
int cannull = 2;
//默认值列
int defaultValue = 3;
//是否主键
int pk = 4;
//注释列
int comment = 5;
//注释
StringBuffer comments = new StringBuffer();
//表名注释
comments.append("comment on table "+tableName+" is '"+tableComment+"';\n");
//建表SQL语句
StringBuffer sql = new StringBuffer();
sql.append("create table " + tableName + "(\n");
//前两行为说明
for (int i = 2; i < datas.size(); i++) {
//对应行数据
List<Object> row = datas.get(i);
//字段项 0
sql.append(String.valueOf(row.get(column)) + " ");
//类型 1
sql.append(String.valueOf(row.get(type)) + " ");
//默认值 3
if(null!=row.get(defaultValue)){
sql.append(" default " +row.get(defaultValue));
}
//是否为空 2
if("N".equalsIgnoreCase(String.valueOf(row.get(cannull)))){
sql.append(" not null");
}
if(i < datas.size() - 1){
sql.append(",");
}
//是否主键 4
if(null != row.get(pk) && "Y".equalsIgnoreCase(String.valueOf(row.get(pk)))){
//设置主键
primary = "alter table "+tableName+" add constraint PK_"+tableName+"_ID primary key (" + String.valueOf(row.get(column)) + ");";
}
//增加注释
comments.append("comment on column ").append(tableName).append(".").append(String.valueOf(row.get(column))).append(" is '"). append(String.valueOf(row.get(comment))).append("';\n");
sql.append("\n");
}
//结束
sql.append(");\n");
//添加注释
sql.append(comments);
//添加主键
sql.append(primary);
return sql.toString();
}
}

excel示例:

excel转换成oracle建表脚本