【JavaWeb】servlet实现excel表格数据批量导入到数据库

news2024/11/17 7:29:07

这是一个教大家使用excel表格,批量将数据导入到数据库的一个教程

通过Javaweb项目 的servlet技术实现,教程详细简单,跟着做就不会报错!

 

1.下载依赖包:

 tomcat-jdbc的jar包下载:文件上传批量导入数据库依赖包 - 万策云盘

 commons-fileupload的jar包下载:文件上传批量导入数据库依赖包 - 万策云盘

 commons-io的jar包下载:文件上传批量导入数据库依赖包 - 万策云盘

 servlet-api的jar包下载:文件上传批量导入数据库依赖包 - 万策云盘

2.编写html前端页面:

<form action="<%=basePath%>ImportMsg" enctype="multipart/form-data" method="post">
				     批量导入: <input style="border:1px solid black;" type="file" name="excelfilename">&nbsp;
				     <input type="submit" value="数据入库"/>
				</form>

3.编写工具实现类 DatabaseOperation.java:

package cn.itbaizhan.tyut.exam.common;
//
//Source code recreated from a .class file by IntelliJ IDEA
//(powered by Fernflower decompiler)
//

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseOperation {
 static Connection conn = null;
 static Statement stmt = null;

 public DatabaseOperation() {
     try {
         Class.forName("com.mysql.jdbc.Driver");
         System.out.println("连接数据库...");
         conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/exam?useUnicode=true&characterEncoding=UTF-8&useSSL=true", "root", "mmmmmmm");
         System.out.println("实例化Statement对象...");
         stmt = conn.createStatement();
         System.out.println("完成数据库连接...");
     } catch (SQLException var2) {
         var2.printStackTrace();
     } catch (Exception var3) {
         var3.printStackTrace();
     }

 }

 public void finalize() throws SQLException {
     if (stmt != null) {
         stmt.close();
     }

     if (stmt != null) {
         conn.close();
     }

 }

 public ResultSet select_op(String sql) throws SQLException {
     if (sql == null) {
         return null;
     } else {
         ResultSet rs = stmt.executeQuery(sql);
         return rs;
     }
 }

 public ResultSet select_op(String sql, int page, int count) throws SQLException {
     if (sql != null && page >= 0 && count > 0) {
         sql = sql + " limit " + page * count + ',' + count;
         ResultSet rs = stmt.executeQuery(sql);
         return rs;
     } else {
         return null;
     }
 }

 public int update_op(String sql) {
     if (sql == null) {
         return -1;
     } else {
         int result = -1;

         try {
             result = stmt.executeUpdate(sql);
         } catch (Exception var4) {
             var4.printStackTrace();
         }

         return result;
     }
 }

 public int select_count(int num, String table) {
     if (num > 0 && table != null) {
         int result = -1;

         try {
             ResultSet rs = stmt.executeQuery("select * from " + table);
             rs.last();
             result = rs.getRow();
             if (result % num == 0) {
                 result /= num;
             } else {
                 result = result / num + 1;
             }
         } catch (Exception var5) {
             var5.printStackTrace();
         }

         return result;
     } else {
         return -1;
     }
 }
}

4.编写servlet类 ImportMsg.java:

package cn.itbaizhan.tyut.exam.sys.servlets;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import cn.itbaizhan.tyut.exam.common.DatabaseOperation;;

/**
 * Servlet implementation class ImportMsg
 */
@WebServlet("/ImportMsg")
public class ImportMsg extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/exam";

    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "mmmmmmm";//此处为自己数据库的密码

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        java.sql.Connection conn = null;
        java.sql.Statement stmt = null;
        try {
            // 注册 JDBC 驱动器
            Class.forName("com.mysql.jdbc.Driver");
            // 打开一个连接
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            // 执行 SQL 查询
            stmt = conn.createStatement();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        try {
            List items = upload.parseRequest(request);
            InputStream is = null;
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (!item.isFormField()) {
                    is = item.getInputStream();
                }
            }
            Workbook workbook = Workbook.getWorkbook(is);
            Sheet sheet = workbook.getSheet(0);
            // 行数111
            int rows = sheet.getRows();
            // 列数
            int columns = sheet.getColumns();

            PreparedStatement ps = conn
                    .prepareStatement("insert into subject(scontent,sa,sb,sc,sd,skey,sstate) values(?,?,?,?,?,?,?)");

            for (int i = 0; i < rows; i++) {
                if (i == 0) {// 第一行是属性,不读取
                    continue;
                }
                Cell ce0 = ((jxl.Sheet) sheet).getCell(0, i);
                Cell ce1 = ((jxl.Sheet) sheet).getCell(1, i);
                Cell ce2 = ((jxl.Sheet) sheet).getCell(2, i);
                Cell ce3 = ((jxl.Sheet) sheet).getCell(3, i);
                Cell ce4 = ((jxl.Sheet) sheet).getCell(4, i);
                Cell ce5 = ((jxl.Sheet) sheet).getCell(5, i);
                Cell ce6 = ((jxl.Sheet) sheet).getCell(6, i);
                
                String c0 = ce0.getContents();
                String c1 = ce1.getContents();
                String c2 = ce2.getContents();
                String c3 = ce3.getContents();
                String c4 = ce4.getContents();
                String c5 = ce5.getContents();
                int c6 = Integer.parseInt(ce6.getContents());

                ps.setString(1, c0);
                ps.setString(2, c1);
                ps.setString(3, c2);
                ps.setString(4, c3);
                ps.setString(5, c4);
                ps.setString(6, c5);
                ps.setInt(7, c6);
                ps.execute();
            }
            ps.close();
            conn.close();
            response.setContentType("text/html;charset=utf-8");
	        //显示弹窗并且当关闭弹窗后跳到指定页面
	        response.getWriter().write("<script>alert('叮咚,批量导入成功!');");
	        response.getWriter().flush();
            //response.sendRedirect(" .html");// 重定向到成功插入学生数据的页面
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

功能实现,编写excel表格上传测试即可:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇打通,性能测试与性能测试瓶颈评估,测试之道...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是性能测试&a…

硬件系统工程师宝典(30)-----降压式Buck电路分析

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到DC/DC变换中的开关调节模式有功耗小、效率高并且稳压范围宽的特点以及DC/DC的指标参数和设计要求。今天我们来分析一下DC/DC中的一个典型…

嬴图 | 围绕中心性算法在寄生虫网络的研究

算法在实践中的应用有哪些&#xff1f;中心性算法的特点和应用一文了解。 前言 寄生&#xff08;Parasitism&#xff09;是两种生物之间的一种“消费者—资源”的关系&#xff0c;即寄生虫&#xff08;Parasite&#xff09;和它的宿主&#xff08;Host&#xff09;。 寄生虫…

智芯MCU软件开发环境搭建

智芯MCU软件开发环境搭建 目录 智芯MCU软件开发环境搭建前言1 软件安装2 编译环境3 烧录环境4 新建工程结束语 前言 智芯科技的MCU主要应用于汽车行业&#xff0c;属于车规级的MCU&#xff0c;目前上市的MCU型号较少&#xff0c;相关资料也不多&#xff0c;所以这里出一期开发…

医学影像信息系统(PACS源码)基本概况和工作原理

一、医学影像信息系统&#xff08;PACS&#xff09;基本概况 医学影像信息系统&#xff08;PACS&#xff09;是一种集影像采集、传输、存储、管理、查询、诊断、报告、归档和科研于一体的综合性应用系统。它基于医学影像存储与通信系统&#xff08;Picture Archiving and Comm…

Seata Saga 模式理论学习、生产级使用示例搭建及注意事项(一) | Spring Cloud57

一、前言 通过以下系列章节&#xff1a; docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…

当我用AI为开发AntV图表插上想象的翅膀后

前言 做前端图表时&#xff0c;最耗时的就是找配置参数&#xff0c;比如你在使用AntV G2时&#xff0c;为了更加美观&#xff0c;拉大数据之间的差距&#xff0c;需要将y轴设置一个最小值&#xff0c;由于每个图表的参数少说十几个&#xff0c;多达二十多个&#xff0c;一个一…

C# 反射 (Reflection) 的常用功能

目录 一、概述 二、实例化类 三、反射赋值 四、获取字段值 五、获取字段名 六、获取字段类型 七、调用方法 结束 一、概述 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块&#xff0c;而模块包含类型&#xff0c;类型又包含成员。反射则…

华为认证 | HCIE-Datacom 考试大纲

01 HCIE-Datacom考试概述 02 HCIE-Datacom考试内容 HCIE-Datacom V1.0 考试覆盖数据通信领域&#xff1a;路由交换高阶技术、企业网络架构全景、园区网络典型架构与技术、华为CloudCampus解决方案设计与部署、广域互联网络典型架构与技术、华为SD-WAN解决方案设计与部署、广域…

人机接口回路原理(四)

五、硬件时钟电路 接口插件设置了一个硬件时钟电路&#xff0c;由一片MC146818时钟芯片及辅助元器件组成&#xff0c;如图1&#xff0d;35所示。 MC146818芯片是智能式硬件时钟&#xff0c;其内部由电子时钟和存储器两部分组成。可计年、月、日、时、分、秒、星期&#xff1b;能…

时间序列中的无监督表示学习

自监督学习中&#xff0c;有一个常用的方法是对比学习&#xff1b; 2.  时间序列的表示学习 1.1 采用对比学习的方式 Time-series representation learning via temporal and contextual contrasting(IJCAI’21) 本文采用对比学习的方式进行时间序列表示学习。首先对于同一…

告别原始 UI 样式,拥抱 Fluent Design 风格 PyQt/PySide 组件库

简介 这是一个使用 PyQt/PySide 编写的 Fluent Design 风格的组件库&#xff0c;支持亮暗主题无缝切换和自定义主题色&#xff0c;搭配 QtDesigner 可以快速开发美观的界面。github 仓库地址为 https://github.com/zhiyiYo/PyQt-Fluent-Widgets &#xff0c;演示视频可以在哔哩…

夏至后,这些农事活动要注意管理

夏至过后&#xff0c;温度会进一步攀登&#xff0c;较高的气温和光照会让夏作物生长更加旺盛。接下来就让我们看看在这些夏作物在种植时都需要注意哪些方面吧&#xff01; 一、蔬菜管理 夏白菜、夏甘蓝、夏菜花都是在6月下旬开始育早熟的菜花苗&#xff0c;秋大棚中的芹菜也是…

超强总结,性能测试实战(购物业务板块)真实压测场景...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 购物网站购物流程…

人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型,调通模型的训练与测试

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型&#xff0c;调通模型的训练与测试。RBM(受限玻尔兹曼机)可以在没有人工标注的情况下对数据进行学习。其原理类似于我们人类学习的过程&#xff0c…

Redis简单动态字符串SDS

目录 前言 一.SDS定义 二.SDS与C字符串的区别 2.1 常数复杂度获取字符串的长度 2.2 杜绝缓冲区溢出 2.3 减少修改字符串时带来的内存重分配次数 2.3.1 空间预分配 2.3.2 惰性空间释放 2.4 二进制安全 2.5 兼容部分C字符串函数 2.6 总结 三.SDS缺点 前言 Redis没有直接使用C语…

gRPC教程与应用

gRPC是是谷歌一个开源的跨语言的RPC框架&#xff0c;面向移动和 HTTP/2 设计。 grpc中文网 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法&#xff0c;使得您能够更容易地创建分布式应用和服务。 gRPC 也是基于以下理念&#xff1…

python3+requests+unittest接口自动化测试

1.环境准备 python3 pycharm编辑器 2.框架目录展示 &#xff08;该套代码只是简单入门&#xff0c;有兴趣的可以不断后期完善&#xff09; &#xff08;1&#xff09;run.py主运行文件&#xff0c;运行之后可以生成相应的测试报告&#xff0c;并以邮件形式发送&#xff1b;…

【C++进阶】红黑树实现

文章目录 红黑树的概念红黑树的性质红黑树节点的定义红黑树结构红黑树的插入1.按照二叉搜索的树规则插入新节点2.进行旋转和变色源码 红黑树的验证中序遍历判断是否满足二叉搜索树判断是否满足红黑树 完整源码 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但…

基于spss的多元统计分析 之 单/双因素方差分析 多元回归分析(1/8)

实验目的&#xff1a; 1&#xff0e;掌握单样本t检验、两样本t检验、配对样本t检验、单因素方差分析、多元回归分析的基本原理&#xff1b; 2&#xff0e;熟悉掌握SPSS软件或者R软件关于单因素、多因素方差分析、多元回归分析的基本操作&#xff1b; 3&#xff0e;利用实验指导…