安卓从Excel文件导入数据到SQLite数据库的实现
在现代的移动应用开发中,数据的处理和管理是至关重要的一环。有时候,我们需要从外部文件(如Excel文件)中导入数据,以便在应用程序中使用。本文将介绍如何在Android应用中使用Java代码从一个Excel文件中导入数据到SQLite数据库。
首先,我们需要定义一个方法importFromExcelFile(),这个方法将负责从指定的Excel文件中读取数据,并将其插入到SQLite数据库中。以下是这个方法的详细实现
implementation ‘org.apache.poi:poi:5.2.3’
implementation ‘org.apache.poi:poi-ooxml:5.2.3’
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;private void importFromExcelFile() {// 获取下载目录File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);// 指定Excel文件的名称(此处为inventory.xls)File file = new File(downloadsDir, "inventory.xls"); // Replace with your XLS file name// 检查文件是否存在if (file.exists()) {try (FileInputStream fis = new FileInputStream(file)) {// 使用HSSFWorkbook读取Excel文件(适用于.xls格式)Workbook workbook = new HSSFWorkbook(fis);// 获取第一个工作表Sheet sheet = workbook.getSheetAt(0);// 遍历工作表中的每一行for (Row row : sheet) {// 跳过标题行if (row.getRowNum() == 0) {continue;}// 从单元格中读取数据String id = getCellStringValue(row.getCell(0));String itemName = getCellStringValue(row.getCell(1));String category = getCellStringValue(row.getCell(2));String description = getCellStringValue(row.getCell(3));int quantity = (int) getCellNumericValue(row.getCell(4));double costPrice = getCellNumericValue(row.getCell(5));double sellingPrice = getCellNumericValue(row.getCell(6));// 准备数据插入到SQLite数据库ContentValues cv = new ContentValues();cv.put("id", id);cv.put("itemname", itemName);cv.put("category", category);cv.put("description", description);cv.put("quantity", quantity);cv.put("costprice", costPrice);cv.put("sellingprice", sellingPrice);// 插入数据到数据库db.insert("inventory", null, cv);}// 提示用户数据已成功导入Toast.makeText(this, "数据已成功导入数据库", Toast.LENGTH_SHORT).show();// 刷新库存数据ids.clear();loadInventoryData();} catch (IOException e) {// 记录错误日志Log.e("ImportError", "Error reading Excel file", e);// 提示用户读取Excel文件时出错Toast.makeText(this, "读取Excel文件时出错", Toast.LENGTH_SHORT).show();}} else {// 提示用户找不到Excel文件Toast.makeText(this, "找不到Excel文件", Toast.LENGTH_SHORT).show();}
}private void loadInventoryData() {ids.clear(); // Ensure the ids list is cleared before loading datatry {Cursor c = db.rawQuery("SELECT id FROM inventory;", null);if (c != null) {while (c.moveToNext()) {ids.add(c.getString(0));}c.close();} else {Log.e("loadInventoryData", "Cursor is null");}inventoryAdapter = new inventoryAdapter(ids, db, this);recyclerView.setAdapter(inventoryAdapter);} catch (Exception e) {Log.e("loadInventoryData", "Error loading inventory data", e);Toast.makeText(inventory.this, "Error loading inventory data: " + e.getMessage(), Toast.LENGTH_LONG).show();}}
代码解析
获取下载目录和文件路径:
使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)获取设备的下载目录。
创建一个指向inventory.xls文件的File对象。
检查文件是否存在:
使用file.exists()方法检查文件是否存在。
读取Excel文件:
使用FileInputStream读取Excel文件。
使用HSSFWorkbook(适用于.xls格式)读取Excel文件内容。
获取第一个工作表(Sheet)。
遍历工作表中的数据:
使用for (Row row : sheet)遍历工作表中的每一行。
跳过第一行(标题行)。
使用自定义方法getCellStringValue和getCellNumericValue从单元格中读取字符串和数字值。
将数据插入SQLite数据库:
使用ContentValues对象准备要插入的数据。
使用db.insert(“inventory”, null, cv)将数据插入到数据库的inventory表中。
提示用户操作结果:
使用Toast提示用户数据已成功导入或读取文件时出错。
刷新库存数据:
清除ids列表(假设这是一个用于缓存数据的列表)。
调用loadInventoryData()方法刷新库存数据。
注意事项
本示例使用HSSFWorkbook读取.xls格式的Excel文件。如果需要读取.xlsx格式的文件,应使用XSSFWorkbook。
需要在AndroidManifest.xml中申请读取外部存储的权限(READ_EXTERNAL_STORAGE)。
在实际开发中,可能需要更复杂的错误处理和用户交互逻辑。
相关文章:
安卓从Excel文件导入数据到SQLite数据库的实现
在现代的移动应用开发中,数据的处理和管理是至关重要的一环。有时候,我们需要从外部文件(如Excel文件)中导入数据,以便在应用程序中使用。本文将介绍如何在Android应用中使用Java代码从一个Excel文件中导入数据到SQLit…...
C/C++基础知识复习(44)
1) C 中多态性在实际项目中的应用场景 多态性是面向对象编程(OOP)中的一个重要特性,指的是不同的对象可以通过相同的接口来表现不同的行为。在 C 中,多态通常通过虚函数(virtual)和继承机制来实现。实际项…...
【day13】深入面向对象编程
【day12】回顾 在正文开始之前,先让我们回顾一下【day12】中的关键内容: 接口(Interface): interface关键字用于定义接口。implements关键字用于实现接口。 接口成员: 抽象方法:需要在实现类中…...
《 火星人 》
题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这…...
盒子模型(内边距的设置)
所有元素都可以设置内边距属性和外边距属性大体相同,可参考上一篇,但有区别 内边距不能设置为负值padding-方向:尺寸 注意:使用内边距padding之后元素整体会变大,因为他是直接加上了内边距的大小,不改变元素…...
CentOS7网络配置,解决不能联网、ping不通外网、主机的问题
1. 重置 关闭Centos系统 编辑->虚拟网络编辑器 还原默认设置 2. 记录基本信息 查看网关地址,并记录在小本本上 查看网段,记录下 3. 修改网卡配置 启动Centos系统 非root用户,切换root su root查看Mac地址 ifconfig 或 ip addr记录下来 修改配置文件 vim /et…...
如何测继电器是否正常
继电器是一种电控制器件,广泛应用于自动控制、电力保护等领域。为了确保继电器的正常工作,定期检测其状态是非常必要的。以下是一些常用的方法来测试继电器是否正常工作: 1. 视觉检查: - 观察继电器的外观是否有损坏、变形或烧焦…...
最优二叉搜索树【东北大学oj数据结构10-4】C++
题面 最优二叉搜索树是由 n 个键和 n1 个虚拟键构造的二叉搜索树,以最小化搜索操作的成本期望值。 给定一个序列 Kk1,k2,...,kn,其中 n 个不同的键按排序顺序 ,我们希望构造一个二叉搜索树。 对于每个关键 ki,我们有一个…...
ESP32应用开发-Webserver
文章目录 库调用实例实现思路技术要点 1. 前端涉及的文件需要包装再发送2. http-GET路由3. http-POST路由 开发环境:Arduino 库调用 #include <WebServer.h> #include <ArduinoJson.h> //IDE没有自带,需自行安装实例 WebServer server…...
【IMU:视觉惯性SLAM系统】
视觉惯性SLAM系统简介 相机(单目/双目/RGBD)与IMU结合起来就是视觉惯性,通常以单目/双目IMU为主。 IMU里面有个小芯片可以测量角速度与加速度,可分为6轴(6个自由度)和9轴(9个自由度)IMU,具体的关于IMU的介…...
前端开发 之 12个鼠标交互特效下【附完整源码】
前端开发 之 12个鼠标交互特效下【附完整源码】 文章目录 前端开发 之 12个鼠标交互特效下【附完整源码】七:粒子烟花绽放特效1.效果展示2.HTML完整代码 八:彩球释放特效1.效果展示2.HTML完整代码 九:雨滴掉落特效1.效果展示2.HTML完整代码 十…...
Unity文件路径访问总结:从基础到高级的资源加载方法
在Unity开发中,文件路径的访问和资源加载是开发者经常需要处理的任务。无论是加载纹理、模型、音频,还是读取配置文件,正确地处理路径和资源加载是确保项目顺利运行的关键。本文将以Unity文件路径访问为主线,详细介绍Unity中常见的…...
AWS Transfer 系列:简化文件传输与管理的云服务
在数字化转型的今天,企业对文件传输、存储和管理的需求日益增长。尤其是对于需要大量数据交换的行业,如何高效、可靠地传输数据成为了一大挑战。为了解决这一难题,AWS 提供了一系列的文件传输服务,统称为 AWS Transfer 系列。这些…...
Jenkins Api Token 访问问题
curl --location http://192.168.18.202:8080/view/ChinaFish/job/Ali/buildWithParameters?token1142be281174ee8fdf58773dedcef7ea4c&DeployTypeUpdateConfig \ --header Authorization: •••••• \ --header Cookie: JSESSIONID.824aa9a5node01ojk9yhh3imc24duwy67…...
垂起固定翼无人机大面积森林草原巡检技术详解
垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段,以下是对该技术的详细解析: 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点,具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…...
【Leetcode 每日一题】1387. 将整数按权重排序
问题背景 我们将整数 x x x 的 权重 定义为按照下述规则将 x x x 变成 1 1 1 所需要的步数: 如果 x x x 是偶数,那么 x x / 2 x x / 2 xx/2。如果 x x x 是奇数,那么 x 3 x 1 x 3 \times x 1 x3x1。 比方说, x …...
科研笔记 KDD 2025
1 基本介绍 KDD 每年有多次投稿周期。KDD 2025 将有两个截止时间:分别是 2024 年 8 月 1 日和 2025 年 2 月 1 日(全文提交截止时间在摘要提交截止后一周)。 同时,KDD 会议论文集(Proceedings)将分两批出…...
黑马Java面试教程_P8_并发编程
系列博客目录 文章目录 系列博客目录前言1.线程的基础知识1.1 线程和进程的区别?难2频3面试文稿 1.2 并行和并发有什么区别? 难1频1面试文稿 1.3 创建线程的四种方式 难2频4面试文稿 1.4 runnable 和 callable 有什么区别 难2频3面试文稿 1.5 线程的 run…...
网络视频监控平台/安防监控/视频综合管理Liveweb视频汇聚平台解决方案
一、当前现状分析 当前视频资源面临以下问题: 1)不同单位在视频平台建设中以所属领域为单位,设备品牌众多,存在的标准不一,各系统之间也没有统一标准; 2)各单位视频平台建设分散、统筹性差&am…...
workman服务端开发模式-应用开发-后端api推送修改二
需要修改两个地方,第一个是总控制里面的续token延时,第二个是操作日志记录 一、总控续token延时方法 在根目录下app文件夹下controller文件夹下Base.php中修改isLoginAuth方法,具体代码如下: <?php /*** 总控制* User: 龙哥…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
