数据库储存Excel表信息

article/2025/10/22 10:27:29

目录

目标

实验背景

原理

具体实现


目标

以Java程序为中介,将Excel表中的信息储存到Mysql数据库中

实验背景

先需要将一张包含学生和老师信息的Excel表中的数据存储到Mysql数据库中

原理

先通过相关jar包的类从Excel表中读取到信息,接着对这些信息进行封装,调用dao层的相关方法存储到数据库中即可

具体实现

要实现该功能我们需要引入一些jar包,这些jar包中封装有操作Excel表的相关类

 在导入了jar包后,我们通过有关类先读取信息;先将每行的信息存入map中,之后运用JavaBean的populate方法对对象信息进行封装,最后调用持久层(dao层)方法存储有关对象信息。

import damain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.joda.time.DateTime;
import service.UserService;
import service.impl.UserServiceImpl;import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class test {public static void main(String[] args) throws Exception {ReadExcel("D:\\桌面\\测试.xls");}public static void ReadExcel(String path) throws Exception {UserService service=new UserServiceImpl();File file = new File(path);// 获取文件流FileInputStream inputStream = new FileInputStream(file);// 1.创建一个工作簿, excel 能操作的它都能操作/** 注意:xls的要用HSSFWorkbook,xlsx要用XSSFWorkbook* 二者区别在于前者是小容量,数据量超过60000↑+便会报错;后置没有该限制,适用于处理数据量大的情况*/Workbook workbook = new HSSFWorkbook(inputStream);// 2.得到表sheet1Sheet sheet = workbook.getSheetAt(0);// 获取物理最大行(即excel表当前所加载的行数,并不是指我们数据写到的哪行)int rowCount = sheet.getPhysicalNumberOfRows();// 获取标题行Row rowTitle = sheet.getRow(0);//读取行for (int rowNum = 1; rowNum < rowCount; rowNum++) {Row rowData = sheet.getRow(rowNum);//封装数据Map<String,String> map=new HashMap();//创建对应对象User user=new User();//该行的数据if (rowData != null && rowData.getCell(0)!=null) {//注意要加上rowData.getCell(0)!=null;不然会出现读空数据情况// 读取列int cellCount = rowTitle.getPhysicalNumberOfCells();for (int cellNum = 0; cellNum < cellCount; cellNum++) {//System.out.print("[" + (rowNum + 1) + "-" + (cellNum + 1) + "]");String cellValue = "";Cell cell = rowData.getCell(cellNum);// 匹配数据的类型if (cell != null) {CellType cellType = cell.getCellType();//int cellType = cell.getCellType();//选择列的对应数据类型switch (cellType) {case STRING: // 字符串//System.out.print("[String]");cellValue = cell.getStringCellValue();break;case NUMERIC:    //数字// System.out.print("[numeric]");if (HSSFDateUtil.isCellDateFormatted(cell)) {    //日期// System.out.print("[日期]");Date date = cell.getDateCellValue();cellValue = new DateTime(date).toString();} else {// 不是日期格式,防止数字过长//  System.out.print("[转换为字符串输出]");cell.setCellType(CellType.STRING);cellValue = cell.toString();}break;default:System.out.print("[数据类型错误!]");break;}}map.put(rowTitle.getCell(cellNum).getStringCellValue(),cellValue);}try {BeanUtils.populate(user, map);System.out.println("user = " + user);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}if(user.getIdentity().equals("学生")){Boolean aBoolean = service.registerStudent(user);System.out.println(aBoolean);}if(user.getIdentity().equals("导师")){Boolean aBoolean = service.registerTutor(user);System.out.println(aBoolean);}}}}
}


http://chatgpt.dhexx.cn/article/8Gaf278H.shtml

相关文章

数据库之存储

无论是什么数据库&#xff0c;其本质还是以数据的形式存储在计算机的物理介质上的&#xff0c;所以&#xff0c;我们先来看看什么是物理存储介质。 物理存储介质:高速缓冲存储器->主存储器->快闪存储器->磁盘->光盘->磁带,从左到右性能由高到低&#xff0c;价格…

数据库存储介绍

数据存储在存储设备中&#xff0c;在实际应用中&#xff0c;有多种存储设备&#xff0c;下面我们一一介绍。同时在保存数据时&#xff0c;有特定的组织方式&#xff0c;在下面我也做简单介绍。 一 存储设备介绍 1.1 高速缓存 Cache&#xff0c;计算机拥有1M或跟多的高速…

Excel|给某一列添加同一个字

如图所示给新型冠状病毒肺炎数据中“武汉”这一列都加上“市”字&#xff1a; 先在D列打两行&#xff1a;“武汉市”、“孝感市” 然后在D3按CtrlE&#xff0c;即可全部填充 ps:如果删除某列同一个字的话用替换即可

鼠标单击就选中一个字的解决办法

有时候我们想在两个字中间插入一个字&#xff0c;点击鼠标时却总是选中一个字。 解决办法&#xff1a; 按一下键盘的Insert键就好了。 造成这种情况的原因&#xff1a;极大可能是因为我们删除文字时不小心碰到了Insert键。 看完如果对你有帮助&#xff0c;感谢点赞支持&…

什么是字节

** 什么是字节 ** 位&#xff08;bit&#xff09;:是计算机 内部数据 存储的最小单位 11001100是一个八位数的二进制数。 字节&#xff08;byte &#xff09;&#xff1a;是计算机中 数据处理的基本单位&#xff0c;习惯上用大写B来表示&#xff1b; 1B&#xff08;byte,字节…

关于“一个字等于多少字节?“的问题解答

网上有人说这个问法不严谨&#xff0c;我觉得严格说确实是这样&#xff0c;但是我个人觉得不能这样说&#xff01; 举个例子&#xff0c;这个问题就好比你上初中的时候那些证明题很多其实是很不严谨的&#xff0c;但是限于知识体系&#xff0c;到高中你会发现好像不是那么一回…

键盘打字时,打一个字后面少一个字如何解决

键盘敲字时&#xff0c;如果光标在中间&#xff0c;输入一个字后面就少一个字 文字输入的例子 只需要按INS键就可以恢复正常了 注&#xff1a;如果是手提笔记本电脑&#xff0c;一个键盘有两下两行&#xff0c;先按一下FN按键&#xff0c;再按INS即可切换为正常状态了

“一个字等于多少个字节?”是一个不严谨的问法

“一个字等于多少个字节&#xff1f;”是一个不严谨的问法 直接回答一个字等于多少个字节&#xff0c;也是不严谨的答法。 相关概念: 1、位&#xff08;bit&#xff09; 来自英文bit&#xff0c;音译为“比特”&#xff0c;表示二进制位。位是计算机内部数据储存的最小单位。…

parted分区命令行形式

一、pared分区实例 1、第一个主分区3G parted -s /dev/sdc mklabel gpt (标签为gpt&#xff0c;小于2t用msdos) parted -s /dev/sdc mkpart primary 0 3G 2、剩余空间给扩展分区 parted -s /dev/sdc mkpart entended 3 100% &#xff08;从3G开始后面都做扩展分区&#xff09;…

centos通过parted对2T以上硬盘分区并对根目录进行扩容

GPT的分区表很好了解决了传统MBR无法逾越2TB的限制。但是在Linux系统中&#xff0c;传统的fdisk命令无法支持gpt分区方式&#xff0c;这时候我们就要用到parted命令 需求&#xff1a; 将一个4t的硬盘&#xff08;sdb)分为3个区&#xff0c;并将sdb1挂载在根目录下进行扩容 1…

Linux Command parted 创建分区

Linux Command parted 创建分区 tags: lvm 文章目录 Linux Command parted 创建分区1. 简介2. 交互模式2.1 常见命令2.2 查看分区表2.3 修改成 GPT 分区表2.4 建立分区2.5 建立文件系统2.6 调整分区大小2.7 删除分区 3. 命令行模式 1. 简介 虽然我们可以使用 fdisk命令对硬…

parted分区详解

---------- Linux中有两种常用的分区表MBR分区表(主引导记录分区表)和GPT分区表(GUID分区表)&#xff0c;其中&#xff1a; MBR分区表&#xff1a;支持的最大分区时2TB&#xff0c;最多支持4个主分区&#xff0c;或3个主分区和1个拓展分区。 GPT分区表&#xff1a;支持最大18…

parted磁盘分区 教程

Linux parted磁盘分区实现步骤解析 相对于fdisk&#xff0c;parted用的比较少&#xff0c;主要用于大于2T的分区。 1.开始分区 help是查看帮助信息。 2.查看磁盘信息 可以看到当前磁盘没有分区&#xff0c;需要将分区表&#xff08;Partition Table&#xff09;类型更改为g…

【Windows环境下使用fvm管理多版本Flutter(flutter版本升级回退)】

Windows环境下使用fvm管理多版本Flutter&#xff08;flutter版本升级回退&#xff09; 安装FVM升级版本升级后&#xff0c;使用方法二再次安装fvm 安装FVM 方式一&#xff1a; 使用choco安装fvm&#xff08;当时环境中Flutter版本是1.22.4&#xff0c;Dart是2.10.4&#xff0…

一个很好用的Flutter SDK版本管理神器fvm

前言 目前Flutter SDK正式版本已经更新到2.2.了&#xff0c;当升级了最新版运行之前的项目&#xff0c;其中最大的变化应该是要适配空安全了&#xff0c;这时如果项目又比较紧急暂不做适配&#xff0c;又只能降级Flutter版本了&#xff0c;然后新项目又要在最新Flutter版本去开…

在MacOS上不用FVM的Flutter多版本管理

网上看到都是用fvm进行多版本管理。 我用的方式没那么复杂&#xff0c;非常简单。 从下面url下载各版本的Flutter: https://flutter.dev/docs/development/tools/sdk/releases?tabmacos 按常规方式配置Flutter的环境。 将下载的Flutter包解压成文件夹后&#xff0c;都放到…

从FVM上线前的测试网统计报告中看前景,Filecoin将会迎来什么变化?

FEVM将在2023/03/14主网上线&#xff01; 在Calibration网络升级正式完成后&#xff0c;Filecoin V18 Hygge升级将于2023年3月14日&#xff08;π日&#xff09;正式上线&#xff01;此次升级将正式为Filecoin网络带来智能合约。基于FVM的可编程性。此次更新升级将释放数据经济…

fvm的管理多版本Flutter sdk

fvm简介 当多个项目使用不同的Flutter版本&#xff0c;或者Flutter发布新版本时&#xff0c;需要改变本地的Flutter版本&#xff0c;频繁的切换&#xff0c;非常消耗时间&#xff08;upgrade&#xff09;,fvm的出现很好的解决多个版本来回切换的问题&#xff0c;并且对指定指定…

SecOc之Fvm新鲜度管理模块

Fvm新鲜度管理模块&#xff1a; 字段同步计数器&#xff08;TirpCounter&#xff09;重置计数器&#xff08;ResetCounter&#xff09;消息计数器&#xff08;MessageCounter&#xff09;重置低位&#xff08;ResetFlag&#xff09;描述MASTER FVM所在ECU会通过新鲜度值同步消息…

win下使用fvm实现多个Flutter版本的切换

win下使用fvm实现多个Flutter版本的切换 配置前说明&#xff1a;Win环境下&#xff0c;下载FVM时&#xff0c;需要先配置一个Dart环境&#xff0c;因为用到 dart pub命令 配置Dart环境 a. 方式一&#xff1a;可以去Dart官网下载安装 官网地址&#xff1a;https://gekorm.com/d…