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建表脚本的更多相关文章
- PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大、小写
原文:PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大.小写 若要将 CDM 中将 Entity的标识符都设为指定的大小写,则可以这么设定: 打开cdm的情况下,进入T ...
- SQL SERVER 生成ORACLE建表脚本
/****** Object: StoredProcedure [dbo].[GET_TableScript_ORACLE] Script Date: 06/15/2012 13:07:16 **** ...
- [转载]PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大、小写
若要将 CDM 中将 Entity的标识符都设为指定的大小写,则可以这么设定: 打开cdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code ...
- Oracle建表脚本记录
--删除 drop table dianfei; --创建表 create table dianfei ( uon ) not null, mmonth ) not null, ddf ,) not ...
- MyBatis项目实战 快速将MySQL转换成Oracle语句
一.前言 因项目需求,小编要将项目从mysql迁移到oracle中 ~ 之前已经完成 数据迁移 (https://zhengqing.blog.csdn.net/article/details/103 ...
- 5.oracle建表的时候同时创建主键,外键,注释,约束,索引
5.oracle建表的时候同时创建主键,外键,注释,约束,索引 1 --主键 )); ) ,constraint aba_pr primary key(id,name1)); --外键 )); --复 ...
- 生成建表脚本up_CreateTable
已经很久没用使用这个脚本了,今天用到,并做修改,增加了生成扩展属性功能. Go if object_ID('[up_CreateTable]') is not null Drop Procedure ...
- oracle 建表时显示ORA-00984: 列在此处不允许
oracle 建表时显示ORA-00984: 列在此处不允许 CreationTime--2018年7月19日16点10分 Author:Marydon 1.情景展示 使用plsql建表时,报错 ...
- oracle 建表时显示ORA-00904无效的标识符
oracle 建表时显示ORA-00904无效的标识符 CreationTime--2018年7月19日16点03分 Author:Marydon 1.情景展示 使用plsql建表时,报错 字段展 ...
随机推荐
- 内存泄漏与指针悬挂&野指针介绍
内存泄漏概念:内存泄漏时指动态申请的内存空间没有正常释放,但是也不能继续使用的情况. 例如: char *ch1; ch1 = new char('A'); char = *ch2 = new cha ...
- Python Jsonpath模块用法
在使用Python做自动化校验的时候,经常会从Json数据中取值,所以会用到Jsonpath模块,这里做个简单的总结 1.关于jsonpath用来解析多层嵌套的json数据;JsonPath 是一种信 ...
- CISP/CISA 每日一题 五
CISA 每日一题(答) 信息系统审计师要确认系统变更程序中的: 1.变更需求应有授权.优先排序及跟踪机制: 2.日常工作手册中,明确指出紧急变更程序: 3.变更控制程序应同时为用户及项目开发组认可: ...
- Mysql 5.7.17 解压版(ZIP版)安装步骤详解
下载 解压版下载地址(需要登录) :http://dev.mysql.com/downloads/mysql/ 下载后解压到你想要安装的目录就可以了 配置环境变量 为了方便使用,不必每次都进入bin目 ...
- MySQL 汉字拼音
http://blog.csdn.net/u012076316/article/details/54951365 http://www.cnblogs.com/diony/p/5483108.html ...
- 洛谷 P1916 小书童——蚂蚁大战
P1916 小书童——蚂蚁大战 题目背景 小A在你的帮助下,开始“刷题”,他在小书童里发现了一款叫“蚂蚁大战”(又称蛋糕保卫战)的游戏.(你懂得) 题目描述 游戏中会出现n只蚂蚁,分别有a1,a2…… ...
- OSX: 逻辑卷管理系统Core Storage(1)
Mac高大上嘛? Mac由于贵就高大上了?Mac由于没有这个哪个就不高大上了?本文没有结论,仅仅是回归技术本源,是不是高大上还要大家自己评说. 大多数Mac用户可能并不在乎苹果的OS X操作系统缺少一 ...
- POJ1308——Is It A Tree?
Is It A Tree? Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22631 Accepted: 7756 De ...
- 06 Jenkins自动化构建
• 在之前的freestyle任务基础上,实现构建功能• 检查maven环境• 构建命令:mvn clean compile• 归档构建产物• 演练参数的使用• 通过配置Trigger进行自动构建• ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇:ASP.NET MVC全局观
摘要 本文对ASP.NET MVC的全局运行机理进行一个简要的介绍,以使得朋友们更好的理解后续文章. 前言 在上一篇文章中,我们实现了第一个ASP.NET MVC页面.对于没有接触 ...