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

导入exce表格中的数据l到数据库的更多相关文章

  1. oracle数据库中导入Excel表格中的数据

    1.点击[工具]-->[ODBC 导入器],如图: 2.在导入器里选择第一个[来自ODBC的数据],用户名/系统DSN-->填写[Excel Files],输入用户名和密码,点击 [连接] ...

  2. MySQL中导入Excel表格中的数据

    在数据库中建立好响应的数据库.表(参考excel表格中列中的名字和内容): 将excel表格另存为txt文件,选择“文本文件(制表符分割)”: 打开相应的txt文件,只留下要导入的数据(windows ...

  3. 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

            Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...

  4. 如何使用免费控件将Word表格中的数据导入到Excel中

    我通常使用MS Excel来存储和处理大量数据,但有时候经常会碰到一个问题—我需要的数据存储在word表格中,而不是在Excel中,这样处理起来非常麻烦,尤其是在数据比较庞大的时候, 这时我迫切地需要 ...

  5. python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

  6. 利用java反射机制实现读取excel表格中的数据

    如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...

  7. 如何轻松的把图片导入execl表格中

    在项目中有时候会遇到往数据库中导数据的时候,往往需要把图片也一起导入execl表格中,那怎么才能把图片一块导入至execl中呢?那么今天我们就来看看怎么实现吧! 如何实现?今天我们就来用jxl和poi ...

  8. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

  9. jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组

    $.ajax({ url: baseURL + "InvoiceSale/OnQuotaInvoiceSale", //点击核销单号时,点击核销时,交互的页面           ...

随机推荐

  1. BZOJ4554 HEOI2016游戏

    网络流. 我一开始傻傻的将每条边与每一列连边,边权为联通块树,但是这样做是错的因为我们就在跑网络流中会忽略掉边和列的关系. 我们在做网络流题时一定要注意题目中给出的限制条件,一定要以限制条件建图!!! ...

  2. [BZOJ4784][ZJOI2017]仙人掌(树形DP)

    4784: [Zjoi2017]仙人掌 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 312  Solved: 181[Submit][Status] ...

  3. Week Four

    2018.12.18 1.[USACO Platinum C] 2.[Gym 102028H] 3.[BZOJ 2750] 4.[BZOJ 3238] 5.[BZOJ 4310] 6.[BZOJ 38 ...

  4. 【hash】BZOJ3751-[NOIP2014]解方程

    [题目大意] 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0.求这个方程在[1,m]内的整数解(n和m均为正整数). [思路] *当年考场上怒打300+行高精度,然而没骗到多少 ...

  5. padding Oracle attack(填充Oracle攻击)

    最近学习到一种老式的漏洞,一种基于填充字节的漏洞.就想记录下来,早在2010年的blackhat大会上,就介绍了padding Oracle漏洞,并公布了ASP.NET存在该漏洞.2011年又被评选为 ...

  6. [CodeForces-763C]Timofey and remoduling

    题目大意: 告诉你一个长度为n的等差数列在模m意义下的乱序值(互不相等),问是否真的存在满足条件的等差数列,并尝试构造任意一个这样的数列. 思路: 首先我们可以有一个结论: 两个等差数列相等,当且仅当 ...

  7. AOP:声明式事务管理流程

    1. 注册BeanFactoryTransactionAttributeSourceAdvisor @EnableTransactionManagement --> @Import(Transa ...

  8. 【原创】LogCat信息演示Activity生命周期

    界面如下:注意:这是在手机.竖屏状态下! (一)1个Activity     /**     * 7个方法     * 测试1个Activity的生命周期     *      * LogCat:   ...

  9. 人脸检测:微软 VS Face++

    近些年国内的人脸技术已经得到了很大的发展,今天网上无意看到了微软和face++两家公司的人脸检测,Face++号称国际顶尖的技术,也用过他们的接口感觉确实很不错,而微软则不再话下了.于是想对比微软和F ...

  10. JAVA容器-重点总结与深度解析

    重点内容总结 问题思考 问题思考解析