• 导入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:大功告成。当然在这里我没有写保存数据到数据库的代码。这不是这个帖子的重点。相信大家都会。










  • 相关阅读:
    测试代码
    内网与外网间通信[转]
    向微软首席执行官史蒂夫·鲍尔默致敬
    Spring Cloud OAuth2
    Docker搭建 MySQL 主从复制
    MySQL-查询结果缓存
    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放
    Mybatis一对一关联查询
    application.Properties 自定义变量 注解@ConfigurationProperties使用方法
    Hibernate中的脏检查和缓存清理机制
  • 原文地址:https://www.cnblogs.com/james1207/p/3395198.html
Copyright © 2020-2023  润新知