JSP 通过Servlet将excel数据导入SQL

2023-05-16

1> 在网上下载jxl.jar,这个JAR包用于Java操作excel,下载后,将这个包复制到工程Webroot下的WEB_INF下的lib中,或是在工程中导入jxl.jar包。

2> 准备excel文件,如图所示:

   

3> 数据库建表

注意:我使用的是SQL Server 2005,如果你的数据库与我不同,则修改db.java里的常量!!!

   数据库名:EducationNET   表名:mynews

   id     int    主键 自动增长

   title varchar(50)

   author   varchar(50)

   acontent    varchar(50)

4> 写好导入数据JSP

   <form action="tosqlservlet" method="post">
       选择文件1:<input type="file" name="excel" />
        <input type="submit" value="导入" />
   </form>
5> db.java 用于连接数据库

public class db {
public Connection connstr = null;
public ResultSet res = null;
public PreparedStatement prase = null;
static private String strUrl = "jdbc:sqlserver://localhost:1433;DataBaseName=EducationNET";
static private String strUser = "sa";
static private String strPwd = "123";
public db()
{
   try
     {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         connstr = DriverManager.getConnection(strUrl, strUser, strPwd);
     }
         catch (SQLException ex)
         {
             System.out.println(ex.getMessage() + "路径错误");
         }
         catch (ClassNotFoundException ex)
         {
             System.out.println(ex.getMessage() + "驱动错误");
         }
         finally{
         System.out.println("成功了");
         }
}
public ResultSet executeQuery(String sql) throws Exception{
   Statement stmt = connstr.createStatement();
   res = stmt.executeQuery(sql);
   return res;
}
public PreparedStatement dosql(String sql) throws Exception{
   prase = connstr.prepareStatement(sql);
   return prase;
}
}

6> excel.java 用于读取excel数据

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
import jxl.Sheet;
import jxl.Workbook;
public class excel {
public   List   addCustomerAssign(File   file)
{
        List ls=new ArrayList();
        jxl.Workbook   rwb   =   null;
           try{
             InputStream   is   =   new   FileInputStream(file);
             rwb   =   Workbook.getWorkbook(is);
               Sheet   rs   =   rwb.getSheet(0);
               int   rsRows   =   rs.getRows();
               for(int   i=1;i <rsRows;i++){//如第一行为属性项则从第二行开始取数据(int   i=0   ;i <rsRows;i++)
                String   cell1=rs.getCell(0,i).getContents()+" ";
                String   cell2=rs.getCell(1,i).getContents()+" ";
                String   cell3=rs.getCell(2,i).getContents()+" ";
                   if(cell1!=null&&!cell1.equals(" ")&&cell2!=null&&!cell3.equals(" "))
                   {
                    mynews ms=new mynews();
                    ms.setTitle(rs.getCell(0,i).getContents());
                    ms.setAuthor(rs.getCell(1,i).getContents());
                    ms.setAcontent(rs.getCell(2,i).getContents());
                    ls.add(ms);
                   }
               }
         }catch(Exception   e){
             e.printStackTrace();
         }
         finally{
             rwb.close();
         }
     return ls;
}
}

7> into.java

public class into {
String sql = "insert into mynews(title,author,acontent) values(?,?,?)";
db data=new db();
public PreparedStatement prase = null;
public Boolean insertexcel(mynews ms) {
   Boolean jiaqi = false;
   try {
    prase = data.dosql(sql);
    prase.setString(1, ms.getTitle());
    prase.setString(2, ms.getAuthor());
    prase.setString(3, ms.getAcontent());
    prase.executeUpdate();
    jiaqi = true;
   } catch (Exception e) {
    e.printStackTrace();
   }
   return jiaqi;
}
}

8> 实体类mynews.java

public class mynews {
private int id;
private String title;
private String author;
private String acontent;
public String getAuthor() {
   return author;
}
public void setAuthor(String author) {
   this.author = author;
}
public String getAcontent() {
   return acontent;
}
public void setAcontent(String acontent) {
   this.acontent = acontent;
}
public int getId() {
   return id;
}

public void setId(int id) {
   this.id = id;
}
public String getTitle() {
   return title;
}
public void setTitle(String title) {
   this.title = title;
}
}

9> 建立servlet tosqlservlet

改动它的doPost方法

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   into in=new into();
     excel ex=new excel();
     String path=new String(request.getParameter("excel").getBytes("ISO8859-1"),"UTF-8");//红色字体改为:gbk即可解决问题
     System.out.println(path);
     File file=new File(path);
     List ls=ex.addCustomerAssign(file);
     Iterator iter=ls.iterator();
     while(iter.hasNext())
     {
      mynews ms=(mynews)iter.next();
      if(in.insertexcel(ms))
       System.out.println("成功");
      else
       System.out.println("失败");
     }
}

运行后,后台会输出成功,打开数据库表,则会看见excel里德数据已经成功导入数据库.

 

运行前台报错:

解决方法 :
web.xml中配置:
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.NullPointerException
com.hua.excel.excel.addCustomerAssign(excel.java:46)
com.hua.action.tosqlservlet.doPost(tosqlservlet.java:65)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.35
张判例  21:04:06
看下后台的信息
海浪  21:04:58
C:\Documents and Settings\Administrator\????\Book1.xls
java.io.FileNotFoundException: C:\Documents and Settings\Administrator\????\Book1.xls (系统找不到指定的路径。)
将excel文件放在盘符中,然后运行。
成功
 


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSP 通过Servlet将excel数据导入SQL 的相关文章

随机推荐

  • Linux基础入门:单片机和Linux有什么不同吗

    我发现很多初学者只有单片机基础 xff0c 甚至没有单片机基础 在学习Linux时 xff0c 对很多概念比较陌生 xff0c 导致不知道学什么 xff0c 也不知道学了之后有什么用 所以小编在此分享此文 第1章 单片机和Linux的区别
  • 为什么都说代码改变世界?是因为这五位程序员创造了未来!

    致敬那些为软件开发奠定坚实基础的计算机科学先驱 从 1 和 0 开始 xff0c 编程经历了很长一段路 xff0c 才达到了现在的抽象状态 过去的程序员用伟大的发明 xff0c 为现代程序员轻松地完成工作奠定了坚实的基础 如果我们研究某个软
  • C语言丨关键字enum用法详解,看这篇就够了

    一 关键字enum的定义 enum是C语言中的一个关键字 xff0c enum叫枚举数据类型 xff0c 枚举数据类型描述的是一组整型值的集合 xff08 这句话其实不太妥当 xff09 xff0c 枚举型是预处理指令 define的替代
  • Ubuntu下cmake使用入门

    CMake是一个跨平台的安装 xff08 编译 xff09 工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 其包含自己的语法结构 xff0c 只要按照其语法编写成
  • Windows与Linux双系统设置默认引导项与删除引导项

    当电脑中安装了Windows和Linux双系统 xff0c 但是每次开机默认自动进入Linux系统时 xff0c 有时根本来不及选择 xff0c 平时常用的系统却是Windows xff0c 于是我们需要让电脑默认选择Windows系统启动
  • 统招非全日制研究生就业受歧视的回应文件

    根据教育部办公厅等五部门 关于进一步做好非全日制研究生就业工作的通知 教研厅函 2019 1号 以及教育部办公厅印发 关于统筹全日制和非全日制研究生管理工作的通知 教研厅函 2016 2号 文件 xff0c 明确自2017年起 xff0c
  • IOTDB集群部署

    背景 IOTDB单节点的数据插入性能不是很好 xff0c 所以 xff0c 想看看集群的效果 xff0c 那么就需要搭建集群的环境 文件获取 下载地址 选择集群版本 文件目录 完成IoTDB Cluster安装后 xff0c 默认会在IoT
  • 全球超1850万条POI数据获取方法

    POI是 Point of Interest 的缩写 xff0c 中文可以翻译为 兴趣点 在地理信息系统中 xff0c 一个POI可以是一栋房子 一个商铺 一个邮筒 一个公交站等 数据获取 xff1a 数据分享 全球超1850万条 POI数
  • 百度网盘普通用户如何上传单文件最大4G文件。window split命令如何分割文件上传。

    普通用户使用百度网盘Web端上传文件时 xff0c 单文件最大支持1G大小 xff1b 使用网盘PC客户端上传文件时 xff0c 单文件最大支持4G xff1b 如果您需要上传大于4G文件 xff0c 可充值百度网盘会员 xff0c 其中
  • FreeRTOS 框架

    官网 章节目录规划 Kernel taskmemory managementqueue mutex semaphoretime managesoftware timerinterrupt process FreeRTOS plus Free
  • 飞行器设计之界限线图

    推重比与翼载荷约束分析 主要性能要求可以表示为最小起飞推重比T W和起飞翼载荷W S的函数 xff0c 每一项性能要求可以在起飞推重比T W 起飞翼载荷W S坐标中构成一条约束曲线 采用能量守恒方程 xff0c 推导出飞机性能约束的一般主管
  • FreeRTOS中使用中断的一些注意事项

    1 几个宏定义的解释 configLIBRARY LOWEST INTERRUPT PRIORITY 这个宏是可以定义的中断最低优先级 xff0c 由于STM32中断管理只用了4位来分配抢占优先级和子优先级 xff0c 并且FreeRTOS
  • 软路由cpu性能跑分

    软路由cpu性能跑分 cpu核心功耗单核多核N50304 46W14052909N50004 46W11522608N41204 46W11072477N41004 46W9952238N42004 46W8362027N34504 46W
  • k8s中pod的基本概念以及pod内资源共享的分析与实现

    目录 pod基本概念 xff1a pod的主要用法 pod资源共享实现机制 pod网络共享测试案例 xff1a 存储共享 pod存储共享测试案例 xff1a pod管理命令 常用的pod管理命令 定义pod pod基本概念 xff1a po
  • 迅雷笔试题2014校园招聘 武汉

  • C#中的readonly与const区别

    xfeff xfeff const 的概念就是一个包含不能修改的值的变量 常数表达式是在编译时可被完全计算的表达式 因此不能从一个变量中提取的值来初始化常量 如果 const int a 61 b 43 1 b是一个变量 xff0c 显然不
  • 改变无线连接、有线连接的优先级

    有线和无线连的是同一个网络 xff0c 当笔记本打开时 xff0c 总是优先使用无线连接 xff0c 如何转变优先级为有线连接呢 xff1f 1 打开网络和共享中心 2 更改适配器设置 xff0c 打开网络连接窗口 3 单击此窗口的高级菜单
  • 杂感一

    从2014年7月工作至今已有快2年了 xff0c csdn的博客从毕业后就很少上了 工作中有很多收获 技术上 也在不断积累和成长中 不管做什么事情 xff0c 要坚持下去 xff0c 方得初心 xff0c 把坚持养成习惯 xff0c 学习如
  • MFC隐藏主窗口的方法

    隐藏基于对话框的MFC应用程序窗口的方法 推荐这个方法 xff0c 非常好用 很多人可能会将窗口创建出来 然后用一个 ShowWindow SW HIDE 的方法去隐藏窗口 当然这是可以做到隐藏的功能 但是有一点不足的地方就是窗口在隐藏之前
  • JSP 通过Servlet将excel数据导入SQL

    1 gt 在网上下载jxl jar 这个JAR包用于Java操作excel 下载后 xff0c 将这个包复制到工程Webroot下的WEB INF下的lib中 xff0c 或是在工程中导入jxl jar包 2 gt 准备excel文件 如图