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