import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class GenSQLFromExcel {
String path ; //放.xls文件的目录 如"c:\\user\\test"
String fileNames[]; //目录下的所有.xls文件 如 a.xls b.xls
Workbook workbook = null; //jxl的类
public String getPath() {
return path;
}
public void setPath(String newfile) {
this.path = newfile;
}
public String[] getFileNames() {
return fileNames;
}
public void setFileNames(String[] fileNames) {
this.fileNames = fileNames;
}
//打印
private void print(StringBuilder sb) {
String tmp = sb.toString();
System.out.print(tmp);
}
/*
* 将生成的建表语句写入磁盘文件
* path 文件名(*.sql)
* sb 拼接生成的建表SQl语句
*/
public void write(String path, StringBuilder sb) {
try {
File f = new File(path);
if (f.exists()) {
System.out.println(f.getName()+" 文件存在,已覆盖...");
} else {
System.out.println(f.getName()+" 文件不存在,正在创建...");
if (f.createNewFile()) {
System.out.println(f.getName()+" 文件创建成功!");
} else {
System.out.println(f.getName()+" 文件创建失败!");
}
}
BufferedWriter output = new BufferedWriter(new FileWriter(f));
output.write(sb.toString());
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 生成列名
* sheet 对应.xls文件的某一个Sheet
* sb 用于拼接SQL语句
*/
private void getColums(Sheet sheet, StringBuilder sb) {
Cell c;
String s;
boolean isID = false;// idStr 判断是否为ID
int rows = sheet.getRows();
int realRows = rows;
for(int i=9;i<rows ;i++){
c=sheet.getCell(24,i); //字段名
s=c.getContents();
if(s!=null && !s.equals("")){
sb.append(s);
if( s.equals("ID")&& i==9)
isID = true;
if(i<rows-1){
c=sheet.getCell(24,i+1);
s=c.getContents();
if(s!=null && s.equals(""))
realRows = i+1;
}
}
else
break;
c=sheet.getCell(38,i); //类型
s=c.getContents();
sb.append(" "+s);
if(s.equals("VARCHAR")){
c=sheet.getCell(42,i); //增加长度
s=c.getContents();
sb.append("("+s+")");
}
c=sheet.getCell(46,i); //是否为主健
s=c.getContents();
if(s!=null && !s.equals(""))
sb.append(" PRIMARY KEY");
if(isID == true){ // 为ID主健则自动增长
sb.append(" AUTO_INCREMENT");
isID = false;
}
c=sheet.getCell(56,i);
s=c.getContents();
if(s!=null && !s.equals("")) //非空
sb.append(" NOT NULL");
c=sheet.getCell(59,i);
s=c.getContents();
if(s!=null && !s.equals(""))
sb.append(" comment '"+s+"'");
if(i<realRows-1)
sb.append(",\n");
}
sb.append("\n);\n");
}
/*
* 生成表头
* sheet 对应.xls文件的一个Sheet(如sheet1,sheet2)
* sb
*/
private void getTableName(Sheet sheet, StringBuilder sb) {
String s = getTableName(sheet);
sb.append("DROP TABLE IF EXISTS "+s+";\n\n" );
sb.append("CREATE TABLE ");
sb.append(s);
sb.append("(\n");
}
/*
* 生成表的文件名 如user, 然后调用者加上.sql 就成了usr.sql
* sheet 对应.xls文件的一个Sheet(如sheet1,sheet2)
*
*/
private String getTableName(Sheet sheet) {
Cell c;
String s;
c = sheet.getCell(35,4); //取表名
if(c != null)
s=c.getContents();
else
s ="TABLE1";
return s;
}
/*
* 生成SQL表 并显示打印
*/
private void buildSql(Sheet sheet) {
StringBuilder sb = new StringBuilder();
if( sheet.getColumns()== 0 &&
sheet.getRows() == 0)
return;
getTableName(sheet, sb);// 取表名
getColums(sheet, sb); // 取字段名
//print(sb); //打印
String file =path+ "\\"+getTableName(sheet)+".sql";
write(file,sb); //写入文件
}
/*
* 解析一个.xls文件
*/
public void run(Workbook workbook, String fileName) {
try {
workbook = Workbook.getWorkbook(new File(fileName));
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Sheet[] shs = workbook.getSheets(); //遍历目录下的.xls文件名
// 从第3个sheet开始
for(int i=2;i<shs.length;i++)
buildSql(shs[i]);
workbook.close();
}
public void run(String s) {
DirList dir = new DirList();
dir.setPath(new File(s));
String[] fileNames = dir.dirList(); //取得该目录下的.xls文件名
setFileNames(fileNames);
for(String file: fileNames)
run(workbook,s+"\\"+file);
}
public static void main(String[] args){
String s = "C:\\user\\test"; //存放 .xls文件的目录 应修改成自己放.xls文件目录
GenSQLFromExcel g = new GenSQLFromExcel();
g.setPath(s);
g.run(s);
}
}
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/*
* TIJ4 书上的一个类,拿来直接用了
*/
public class DirList {
static File path = new File("."); //默认是当前文件目录
static String regex = ".*\\.xls"; //默认的查找的文件格式
public static FilenameFilter filter(final String regex){
return new FilenameFilter() //匿名内部类
{
private Pattern pattern = Pattern.compile(regex);
//回掉函数 具体的过程还不清楚
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
};
}
DirList(){};
DirList(File file, String reg){
path = file;
regex = reg;
}
void setPath(File f){ path = f;}
void setRegex(String reg) {regex = reg;}
String[] dirList(){
String[] files ;
files = path.list(filter(regex));
return files;
}
public static void main(String[] args) {
DirList dl = new DirList(); //先在当前目录下找
String[] tmp = dl.dirList();
for(String s :tmp)
System.out.println(s);
System.out.println("-------------------------------");
dl.setPath(new File("c:\\user")); //重新 设置目录
dl.setRegex(".*\\.xls"); //重新 设置查找条件
tmp = dl.dirList();
for(String s :tmp)
System.out.println(s);
}
}
分享到:
相关推荐
总的来说,"读取Excel生成Sql脚本"是一个利用Java编程语言,结合JDBC和POI库实现的数据处理工具。它简化了从Excel到数据库的数据迁移过程,提升了数据操作的效率。对于熟悉Java和数据库的开发者来说,这是一个非常有...
总结,Java读取Excel并进行数据库建库建表及生成Java实体的过程涉及了Apache POI库的使用、数据库操作和源代码生成。理解这些步骤可以帮助你有效地处理类似的任务,提高开发效率。在实际应用中,你还需要考虑错误...
这个“读取excel自动生成sql文的txt文件”的工具显然是为了解决这一问题而设计的。它允许用户通过Excel表格结构快速生成对应的SQL插入语句,极大地提高了工作效率。 首先,我们需要理解Excel文件的结构。Excel是一...
Java作为企业级应用开发的主要语言,经常被用来处理与数据相关的任务,包括从Excel文件读取数据并生成Hive建表语句。下面我们将详细探讨如何使用Java和Apache POI库来实现这一功能。 首先,Apache POI是Java中处理...
"根据Excel生成建表语句源码.rar"这个压缩包文件提供了一种解决方案,它包含了一段用于自动化生成SQL建表语句的代码。 首先,我们要理解这个过程的基本原理。Excel文件通常包含多个工作表,每个工作表可以被视为一...
本话题主要关注如何利用Python的xlrd库来读取Excel文件,并根据其中的数据生成适用于Oracle数据库的建表语句。 首先,xlrd是一个Python库,专门用于读取Excel文件。它支持多种Excel文件格式,包括.xls和.xlsx,使得...
"Excel生成SQL语句和实体类代码生成器"就是一个这样的实用工具,它允许开发者通过Excel表格来快速构建数据库操作所需的SQL语句以及与之对应的Java实体类代码,大大减少了手动编写这些代码的时间。 这个工具的核心...
代码是一个 eclipse + myeclipse 工程 最简单的JAVA操作读取excel java生成excel java读取word java连接SQL server数据库 还有一个简单的Java servlet的程序
这里提到的"Excel转sql(只需要生成实体类即可)"可能指的是通过生成Java实体类来完成转换。实体类是面向对象编程中的一种概念,它对应数据库中的表,每个属性对应表的列。 4. 创建Java实体类:实体类是Java代码,...
1、不需要运行代码,只需要按照模板编写业务表字段即可,然后在Excel中点击生成DDL即可生成建表sql; 2、方便可视化sql表字段展示,统一维护,可放在钉钉、teams、云盘中共同维护,方便版本管理,生成最新的表结构;...
标题中的“Excel生成MYSQL建表语句”是指利用JAVA编程技术,通过读取预先设计好的Excel模板,自动生成对应的MySQL数据库建表语句的过程。这个过程通常涉及到数据处理、文件读写以及数据库操作等核心技能。 首先,让...
总结来说,Java结合Apache POI和MySQL JDBC驱动,可以实现从Excel文件读取数据并自动生成MySQL表的功能。这在项目开发中非常实用,特别是在需要频繁根据变动的数据模型更新数据库结构时。通过熟练掌握这些技术,...
JAVA读取Excel表格,建数据库建表,并生成java实体实例,这一篇通过JAVA读取Excel,将Excel表结构同步到数据库中,并生成java实体类。与上一篇类似,这里只介绍类...SyncDbBiz.java 业务层,包括同步数据库和生成sql.
这个工具基于Excel的宏功能,使得非编程背景的用户也能相对轻松地生成SQL脚本,这对于数据库设计和管理非常有帮助。 首先,Oracle数据库是一种关系型数据库管理系统(RDBMS),广泛应用于大型企业级应用中,它支持...
本文将详细讲解如何在Excel文件中批量生成INSERT语句,以便快速地将数据导入到数据库中。 首先,我们需要了解INSERT语句的基本结构。INSERT语句用于向数据库表中插入新的记录,其基本语法如下: ```sql INSERT ...
本工具,名为"基于Java的简单数据库设计生成工具(生成Excel文档)",旨在简化这一过程,将数据库表结构、主键信息和索引信息等重要数据以直观易读的Excel格式呈现。 首先,让我们来了解下核心技术: 1. **Java**:...
总的来说,纯Java连接Excel是Java开发者必备的一项技能,尤其在数据处理、报告生成或自动化测试等场景中。利用Apache POI库,开发者可以灵活地创建、修改和读取Excel文件,实现数据的导入导出,提高工作效率。结合...
这个名为"JAVA读取Excel,建库建表,并生成java实体.zip"的压缩包文件,显然提供了一个完整的解决方案,涵盖了从读取Excel数据到在数据库中创建表,以及根据Excel内容生成Java实体类的全过程。下面我们将详细探讨...
在IT行业中,批量导入Excel数据并生成SQL是一种常见的任务,特别是在数据分析、数据库管理以及系统集成等领域。这个过程涉及到了文件处理、数据解析、SQL语句的构造等多个技术环节。下面,我们将详细探讨这个主题。 ...