`
numberoneschool
  • 浏览: 7896 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 读Execl生成SQL

    博客分类:
  • java
阅读更多
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脚本

    总的来说,"读取Excel生成Sql脚本"是一个利用Java编程语言,结合JDBC和POI库实现的数据处理工具。它简化了从Excel到数据库的数据迁移过程,提升了数据操作的效率。对于熟悉Java和数据库的开发者来说,这是一个非常有...

    JAVA读取Excel,建库建表,并生成java实体

    总结,Java读取Excel并进行数据库建库建表及生成Java实体的过程涉及了Apache POI库的使用、数据库操作和源代码生成。理解这些步骤可以帮助你有效地处理类似的任务,提高开发效率。在实际应用中,你还需要考虑错误...

    读取excel自动生成sql文的txt文件

    这个“读取excel自动生成sql文的txt文件”的工具显然是为了解决这一问题而设计的。它允许用户通过Excel表格结构快速生成对应的SQL插入语句,极大地提高了工作效率。 首先,我们需要理解Excel文件的结构。Excel是一...

    java根据excel生成 hive建表语句

    Java作为企业级应用开发的主要语言,经常被用来处理与数据相关的任务,包括从Excel文件读取数据并生成Hive建表语句。下面我们将详细探讨如何使用Java和Apache POI库来实现这一功能。 首先,Apache POI是Java中处理...

    根据Excel生成建表语句源码.rar

    "根据Excel生成建表语句源码.rar"这个压缩包文件提供了一种解决方案,它包含了一段用于自动化生成SQL建表语句的代码。 首先,我们要理解这个过程的基本原理。Excel文件通常包含多个工作表,每个工作表可以被视为一...

    通过xlrd读取excel生成oracle的建表语句

    本话题主要关注如何利用Python的xlrd库来读取Excel文件,并根据其中的数据生成适用于Oracle数据库的建表语句。 首先,xlrd是一个Python库,专门用于读取Excel文件。它支持多种Excel文件格式,包括.xls和.xlsx,使得...

    excel生成sql语句和实体类代码生成器

    "Excel生成SQL语句和实体类代码生成器"就是一个这样的实用工具,它允许开发者通过Excel表格来快速构建数据库操作所需的SQL语句以及与之对应的Java实体类代码,大大减少了手动编写这些代码的时间。 这个工具的核心...

    JAVA操作EXCEL,WORD 连接SQL数据库,

    代码是一个 eclipse + myeclipse 工程 最简单的JAVA操作读取excel java生成excel java读取word java连接SQL server数据库 还有一个简单的Java servlet的程序

    Excel转sql(只需要生成实体类即可)

    这里提到的"Excel转sql(只需要生成实体类即可)"可能指的是通过生成Java实体类来完成转换。实体类是面向对象编程中的一种概念,它对应数据库中的表,每个属性对应表的列。 4. 创建Java实体类:实体类是Java代码,...

    根据Excel文件生成数据库insert建表sql

    1、不需要运行代码,只需要按照模板编写业务表字段即可,然后在Excel中点击生成DDL即可生成建表sql; 2、方便可视化sql表字段展示,统一维护,可放在钉钉、teams、云盘中共同维护,方便版本管理,生成最新的表结构;...

    Excel生成MYSQL建表语句

    标题中的“Excel生成MYSQL建表语句”是指利用JAVA编程技术,通过读取预先设计好的Excel模板,自动生成对应的MySQL数据库建表语句的过程。这个过程通常涉及到数据处理、文件读写以及数据库操作等核心技能。 首先,让...

    java读取excl文件内容进行mysql自动创建表

    总结来说,Java结合Apache POI和MySQL JDBC驱动,可以实现从Excel文件读取数据并自动生成MySQL表的功能。这在项目开发中非常实用,特别是在需要频繁根据变动的数据模型更新数据库结构时。通过熟练掌握这些技术,...

    JAVA读取Excel,建库建表,并生成java实体.rar

    JAVA读取Excel表格,建数据库建表,并生成java实体实例,这一篇通过JAVA读取Excel,将Excel表结构同步到数据库中,并生成java实体类。与上一篇类似,这里只介绍类...SyncDbBiz.java 业务层,包括同步数据库和生成sql.

    excel2003 生成oracle 建表语句

    这个工具基于Excel的宏功能,使得非编程背景的用户也能相对轻松地生成SQL脚本,这对于数据库设计和管理非常有帮助。 首先,Oracle数据库是一种关系型数据库管理系统(RDBMS),广泛应用于大型企业级应用中,它支持...

    excel文件中批量生成insert语句

    本文将详细讲解如何在Excel文件中批量生成INSERT语句,以便快速地将数据导入到数据库中。 首先,我们需要了解INSERT语句的基本结构。INSERT语句用于向数据库表中插入新的记录,其基本语法如下: ```sql INSERT ...

    基于Java的简单数据库设计生成工具(生成Excel文档)

    本工具,名为"基于Java的简单数据库设计生成工具(生成Excel文档)",旨在简化这一过程,将数据库表结构、主键信息和索引信息等重要数据以直观易读的Excel格式呈现。 首先,让我们来了解下核心技术: 1. **Java**:...

    JdbcExcel纯Java连接Excel

    总的来说,纯Java连接Excel是Java开发者必备的一项技能,尤其在数据处理、报告生成或自动化测试等场景中。利用Apache POI库,开发者可以灵活地创建、修改和读取Excel文件,实现数据的导入导出,提高工作效率。结合...

    JAVA读取Excel,建库建表,并生成java实体.zip

    这个名为"JAVA读取Excel,建库建表,并生成java实体.zip"的压缩包文件,显然提供了一个完整的解决方案,涵盖了从读取Excel数据到在数据库中创建表,以及根据Excel内容生成Java实体类的全过程。下面我们将详细探讨...

    批量导入Excel数据,生成sql

    在IT行业中,批量导入Excel数据并生成SQL是一种常见的任务,特别是在数据分析、数据库管理以及系统集成等领域。这个过程涉及到了文件处理、数据解析、SQL语句的构造等多个技术环节。下面,我们将详细探讨这个主题。 ...

Global site tag (gtag.js) - Google Analytics