导入exce表格中的数据l到数据库

因为我的项目是JavaWeb的,所有是通过浏览器导入数据库到服务器端的数据库,这里我们采用struts来帮助我们完成。

1:首先定义一个文件上传的jsp页面。把我们的数据先上传到服务器端。

 <form action="excelUpload.action" method="post" enctype="multipart/form-data">
    
    Your excel file: <input type="file" name="file"> 
    
    <input type="submit" value="开始导入">
</form>


2:在struts.xml配置我们的action喽。

<package name="excel" extends="struts-default">
		<action name="excelUpload" class="action.ExcelUpload">
			<result name="success" type="redirect">/excelUploadSuccess.jsp</result>
			<result name="input">/excelUpload.jsp</result>			
		</action>
		 	
</package>

3:当然是书写我们的action了。

package action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import model.Person;

import org.apache.struts2.ServletActionContext;

import service.PersonService;
import service.impl.PersonServiceImpl;

import com.opensymphony.xwork2.ActionSupport;


//将excel导入到数据库,对于日期类型的有问题,只要在excel中要求日期的类型为2012-12-12就可以了,一定不能是2012/12/12 
public class ExcelUpload extends ActionSupport {
	private File file;
	private String fileFileName;
	private String fileContentType;//后面3个成员变量的命名是有规律的,不能随便起名字
	private String root;
	
	 
	public String getRoot() {
		return root;
	}
	public void setRoot(String root) {
		this.root = root;
	}
	public File getFile() {
		return file;
	}
	public void setFile(File file) {
		this.file = file;
	}
	public String getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}
	public String getFileContentType() {
		return fileContentType;
	}
	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}
	
	
	@Override
	public String execute() throws Exception {
		uploadExcel2PC(); //上传excel文件到服务器的电脑上
		
		String[][] str = getDataFromExcel();//读取excel文件,并且把数据读到一个二维数组里面去。
		
		//printData(str); //打印一下数据。测试用
		
		writeData2DB(str);//把数据写到数据库。
		
		return SUCCESS;
	}
	
	private void printData(String[][] str) {
		for (int j = 0; j < str.length; j++) {  
			for (int i = 0; i < str[1].length; i++) { 
				System.out.print(str[j][i] + "    "); 
			}
			System.out.println();
		}
	}
	
	private void uploadExcel2PC() throws FileNotFoundException, IOException {
		root=ServletActionContext.getRequest().getRealPath("/upload");
		new File(root).mkdirs();
		
		InputStream is=new FileInputStream(file);
		
		//目标文件,存到目录里面
		File destFile=new File(root,fileFileName);
		
		OutputStream os=new FileOutputStream(destFile);
		
		byte[] buffer=new byte[400];
		
		int length=0;
		
		while(-1!=(length=is.read(buffer))){
			os.write(buffer,0,length);
		}
		
		is.close();
		os.close();
	}
	
	public String[][] getDataFromExcel() throws BiffException, IOException{
		File file = new File(root + "/"  + fileFileName);
			 
		Workbook book = Workbook.getWorkbook(file);	//读取excel文件  
		Sheet sheet = book.getSheet(0);     		//这里是获取第一个工作表格
		int rows = sheet.getRows();	//获取总的行数  
		int cols = sheet.getColumns();	//获取总的列数  
		String[][] str = new String[rows][cols];	//定义一个二维数组
		
		for(int i=0;i<str.length;i++){	//读取单元格内容并存放到二维数组中 默认从第一行第一列读取      
			for(int j=0;j<str[i].length;j++){                    
				Cell cell = sheet.getCell(j,i);
				str[i][j] = cell.getContents();
			}    
		}
		
		if (file.exists()) {
			file.delete();
		}
		
		return str;
	}
	
	private void writeData2DB(String[][] str) {
		for (int j = 1; j < str.length; j++) {  //从第二行开始读取
			Person person=new Person();
			
			person.setUsername(str[j][1]);
			person.setPassword(str[j][2]);
			person.setAge(Integer.parseInt(str[j][3]));
			person.setRegisterDate(StringToDate(str[j][4]));
			
			PersonService personService=new PersonServiceImpl();
			personService.savePerson(person);
		} 
	}
	
	public  java.sql.Date StringToDate(String dateStr){
		DateFormat dd=new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date=null;
		
		try {
			date = dd.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		java.sql.Date date2 = new java.sql.Date(date.getTime()); //java.util.date --->java.sql.date
		
		return date2;
	}
}


4:大功告成。当然在这里我没有写保存数据到数据库的代码。这不是这个帖子的重点。相信大家都会。










原文地址:https://www.cnblogs.com/james1207/p/3395198.html