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建表时,报错 字段展 ...
随机推荐
- 内网使用 IPV6 之Teredo篇
这篇转载自 http://bbs.pcbeta.com/viewthread-1580771-1-1.html 上IPv6站点之Teredo篇http://bbs.pcbeta.com/viewthr ...
- ubuntu16 升级后找不到 eth0 网卡 的解决方法
ubuntu16 升级后找不到 eth0 网卡 的解决方法 今天在VPS上一时手痒,执行了升级命令 apt-get update 更新软件包索引,源 apt-get upgrade 更新软件包 apt ...
- 17.Node.js 回调函数--异步编程
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程 ...
- POJ 3220 Jessica's Reading Problem
Jessica's Reading Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12944 Accep ...
- HDU 2489 Minimal Ratio Tree(prim+DFS)
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- C++ 指针与引用 知识点 小结
[摘要] 指针能够指向变量.数组.字符串.函数.甚至结构体.即指针能够指向不同数据对象.指针问题 包含 常量指针.数组指针.函数指针.this指针.指针传值.指向指针的指针 等. 主要知识点包含:1. ...
- C++ Traits 技术
Tarits.特性的复数. c++萃取技术就是指它. 实现方式是模板特化. STL中涉及到iterator的地方常常能用到它. gcc的STL与VS的STL略有区别. vs中下列代码,把鼠标放在ite ...
- Lamp(linux+apache+mysql+php)环境搭建
Lamp(linux+apache+mysql+php)环境搭建 .安装apache2:sudo apt-get installapache2 安装完毕后.执行例如以下命令重新启动apache:sud ...
- .net core 分布式性能计数器的实现
1.特别鸣谢张善友老师的指点; 2.分布式性能计数器链接地址:https://mp.weixin.qq.com/s/hPV_bNZD4XmjP0QTE54pWA
- 5. Spring Boot 拦截器
转自:https://blog.csdn.net/catoop/article/details/50501696