poi之Excel文件上传到数据库和导出(结合ssh)
2016-12-12 17:51
483 查看
一.文件上传到数据库
1.Jquery相关文件a.jquery-1.8.3.js
b.jquery.ocupload-1.1.2.js
2.poi相关jar包,可从网上下载
核心包:poi-3.9-20121203.jar(版本可根据需要选择)
相关包:根据需要选择是否导入
3.上传学生表Student实例及相关代码
//学生模型
public class Student{
private String name;
private String gender;
private int age;
......
}
//对应数据库表t_student
第一步:前端定义上传按钮
<input type="button" id="upload" value = "上传"/>
第二步:前端调用js
$(function(){
$("#upload").upload({
action:"uploadAction_test.action"//上传请求
name:filename//上传文件名称
params:{}//传递请求参数,可选
onSelect:function(selef,element){}//根据需要选择触发事件
onComplete:function (data, self, element) {}//上传完毕后的回调
});
});
第三步:服务端处理action请求
public class uploadAction extends ActionSupport implements ModelDriven<Sudent> {
//模型驱动
private Studnet student = new Student();
public Studnet getModel() {
return student;
}
private File filename;//对应js中的filename
public void setFilename(File filename) {
this.filename=filename;
}
public String test ()
//定义list集合用来封装存储数据
List<Studnet> list = new ArrayList<Studnet> ();
//关联excle表,创建excel操作对象
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename));
//拿到excel表中的sheet
HSSFSheet sheetAt = workbook.getSheetAt(0);
// 循环遍历sheet,拿到表中的每一行 for (Row row : sheetAt) { //去掉标题行 if(row.getRowNum()==0){ continue; } //拿到每一行并封装成对象,注意拿到的都是Sting类型 String name = row.getCell(0).getStringCellValue(); String age = row.getCell(1).getStringCellValue();
String gender = row.getCell(2).getStringCellValue();
//封装成对象
Student student = new Student (name,Integer.parseInt(age),gender)
//存储到集合
list.add(stu 10c1c dent);
}
//调用服务层,将集合中的元素取出存到数据库即可
new service().importXls(list);
}
......省略服务层以及dao层的代码
二.导出下载数据到excel 表
第一步:前端下载请求<input type="button" id = "download" value="导出"/>
$(function(){
$("#download").click(function(){
window.location.href="downloadAction_exportXls.action";
});
});
第二步:服务端处理请求
public class DownloadAction extends ActionSupport impelemts ModelDriven<Student> {
public String exportXls() {
//通过服务层和dao层,查询数据库,获得需要导出的数据
List<Studnet> list = daoImpl.getStudnets()//简写直接调用dao
//创建excel操作对象
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet
HSSFSheet sheet = workbook.createSheet("学生数据");
//设置表格的标题行
HSSFRow headRow = sheet.createRow(0);
headRow.createCell(0).setCellValue("姓名");
headRow.createCell(1).setCellValue("年龄");
headRow.createCell(2).setCellValue("性别");
//遍历集合,将每一条记录写入excel表
for (Student student : list) {
HSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1);
row.createCell(0).setCellValue(studetn.getName());
row.createCell(1).setCellValue(subarea.getAge());
row.createCell(2).setCellValue(subarea.getGender());
}
//创建输出流
ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
//下载的文件名
String filename = "学生数据.xsl"
//利用工具类处理文件名,做到浏览器兼容
filename=FileUtils.encodeDownloadFilename(filename,ServletActionContext.getRequest().getHead("user-agent");
//设置响应头
ServletActionContext.getResponse().setContentType(ServletActionContext.getServletContext.getMimeType(filename));
ServletActionContext.getRespone().setHeader("content-disposition","attachement;filename="+filename);
workbook.write(os);
}
}
//文件工具类 public class FileUtils { /** * 下载文件时,针对不同浏览器,进行附件名的编码 * * @param filename * 下载文件名 * @param agent * 客户端浏览器 * @return 编码后的下载附件名 * @throws IOException */ public static String encodeDownloadFilename(String filename, String agent) throws IOException { if (agent.contains("Firefox")) { // 火狐浏览器 filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?="; filename = filename.replaceAll("\r\n", ""); } else { // IE及其他浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+"," "); } return filename; } }
相关文章推荐
- mysql 查询指定表的各字段名以及备注
- 怎么编写mybatis.xml文件,实现sql增删改查
- ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了
- Redis学习手册(目录)
- 利用beego自动生成带数据库基本CRUD的API和自动化文档
- mysql全量备份、增量备份
- sql语句总结
- Oracle Database 12c安装教程(Windows版)
- mysql服务器和配置优化
- 关于ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- 数据库删除为NULL的数据
- mysql重复记录的查询删除方法
- MySQL 5.7 No directory, logging in with HOME=/
- SQL判断语句用法和多表查询
- sqlite 更换 mysql
- MongoDB十分钟搞定CRUD
- mysql in or union 和 unionall 的 浅析
- 关于 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock的问题
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- Oracle表空间(tablespaces)