java读Excel表写excel表和数据库交互

简介: java读Excel表写excel表和数据库交互

背景

现在做的体测项目要求将数据库中的数据按照一定的格式导出excel,下面我们就来说说是怎么做到的吧。

在现实生活和商业场景中,数据库和Excel之间的交互是非常常见和重要的。背景可以是以下几种情况:

数据导入和导出: 在许多情况下,数据需要从数据库导出到Excel表格中进行分析、汇总或分享给其他团队成员。同样,有时也需要将Excel中的数据导入到数据库中,以便更好地管理和存储数据。

数据报表和分析: Excel表格通常用于创建各种形式的数据报表和分析,这些报表可能需要从数据库中提取数据,通过Excel的功能进行加工和处理,然后生成漂亮且易读的报表。

临时数据存储: 有时,临时性的数据需要在Excel中进行编辑和处理,例如在会议中记录的信息或者简单的数据计算。这些数据可以先导出到Excel,进行必要的处理和修改,然后再导入回数据库。

非技术人员操作: Excel表格通常更容易被非技术人员使用,因为它提供了直观和友好的界面。在某些情况下,非技术人员可能需要直接与数据进行交互,而不需要使用复杂的数据库管理工具

备份和还原: Excel表格可以作为数据库数据的备份方式之一。在数据库备份出现问题或者需要还原数据时,可以使用Excel中的备份数据进行恢复。

步骤

原理:

Java读取Excel表、写Excel表和数据库交互的原理如下:

Java读取Excel表原理:

Java通过Apache POI库来读取Excel表格。POI是Apache基金会的一个开源项目,用于处理Microsoft Office格式的文档,包括Excel。Java读取Excel的原理是通过POI库解析Excel文件的二进制格式,将Excel文件转换成Java对象。POI提供了不同的API,如HSSF(处理Excel 97-2003格式)和XSSF(处理Excel 2007格式及以上)来读取Excel文件中的数据。Java开发人员可以使用这些API来读取Excel中的单元格数据、行数据或整个工作表的内容。

Java写Excel表原理:

与读取Excel相反,Java通过Apache POI库来写Excel表格。开发人员可以使用POI库创建新的Excel文件或者修改已有的Excel文件。通过POI的API,可以创建Excel工作簿、工作表、单元格,并设置它们的内容和格式。最后,将Java对象的数据写入Excel文件,并将其保存在磁盘上。

Java与数据库交互原理:

Java与数据库交互主要涉及两个方面:JDBC(Java Database Connectivity)和ORM(对象关系映射)。

JDBC:JDBC是Java提供的一组API,用于与关系型数据库进行交互。通过JDBC,Java应用程序可以连接到数据库,并执行SQL语句来执行增删改查等操作。Java开发人员使用JDBC API来建立数据库连接、创建和执行SQL语句,并处理数据库返回的结果。

ORM:ORM是一种编程技术,它允许开发人员使用面向对象的方式来操作数据库,而无需编写复杂的SQL语句。ORM工具可以将Java对象与数据库表之间建立映射关系,使得开发人员可以直接通过操作Java对象来实现数据库操作。在Java中,Hibernate是最常用的ORM框架之一,它简化了数据库操作,并提供了一系列的API来实现数据的持久化和检索。

综上所述,Java通过Apache POI库实现Excel表的读取和写入,通过JDBC进行与关系型数据库的交互,而通过ORM框架如Hibernate,可以以面向对象的方式操作数据库,提高开发效率和代码可维护性。这些技术使得Java在处理Excel表和数据库交互方面成为一种强大的编程语言。

实现方式:

具体实现demo

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
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;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class excel {
    //数据库数据导出来
//    public static void main(String[] args) {
//        String jdbcURL = "jdbc:mysql://localhost:3306/test";
//        String username = "root";
//        String password = "123456";
//        String excelFilePath = "C:\\Users\\Administrator\\Desktop\\111.xlsx";
//        try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {
//            String sql = "SELECT * FROM testTable";
//            PreparedStatement statement = connection.prepareStatement(sql);
//            ResultSet resultSet = statement.executeQuery();
//            XSSFWorkbook workbook = new XSSFWorkbook();
//            Sheet sheet = workbook.createSheet("Data");
//            writeHeaderLine(resultSet, sheet);
//            writeDataLines(resultSet, workbook, sheet);
//            FileOutputStream outputStream = new FileOutputStream(excelFilePath);
//            workbook.write(outputStream);
//            workbook.close();
//            statement.close();
//            resultSet.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    private static void writeHeaderLine(ResultSet resultSet, Sheet sheet) {
//        try {
//            ResultSetMetaData metaData = resultSet.getMetaData();
//            int numberOfColumns = metaData.getColumnCount();
//            Row headerRow = sheet.createRow(0);
//            for (int i = 1; i <= numberOfColumns; i++) {
//                String columnName = metaData.getColumnName(i);
//                Cell headerCell = headerRow.createCell(i - 1);
//                headerCell.setCellValue(columnName);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    private static void writeDataLines(ResultSet resultSet, XSSFWorkbook workbook, Sheet sheet) {
//        try {
//            ResultSetMetaData metaData = resultSet.getMetaData();
//            int numberOfColumns = metaData.getColumnCount();
//            int rowCount = 1;
//            while (resultSet.next()) {
//                Row row = sheet.createRow(rowCount++);
//                for (int i = 1; i <= numberOfColumns; i++) {
//                    Object object = resultSet.getObject(i);
//                    Cell cell = row.createCell(i - 1);
//                    if (object instanceof Integer) {
//                        cell.setCellValue((Integer) object);
//                    } else if (object instanceof Double) {
//                        cell.setCellValue((Double) object);
//                    } else if (object instanceof String) {
//                        cell.setCellValue((String) object);
//                    } else if (object instanceof java.sql.Date) {
//                        cell.setCellValue((java.sql.Date) object);
//                    } else if (object instanceof java.util.Date) {
//                        cell.setCellValue((java.util.Date) object);
//                    }
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
    //数据库数据倒上去
    public static void main(String[] args) {
        String jdbcURL = "jdbc:mysql://localhost:3306/test";
        String username = "root";
        String password = "123456";
        String excelFilePath = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\111.xlsx";
        try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {
            FileInputStream inputStream = new FileInputStream(excelFilePath);
            Workbook workbook = new XSSFWorkbook(inputStream);
            Sheet sheet = workbook.getSheetAt(0);
            String sql = "INSERT INTO testTable (id, name, price) VALUES (?, ?, ?)";
            PreparedStatement statement = connection.prepareStatement(sql);
            int rowNumber = 0;
            for (Row row : sheet) {
                if (rowNumber == 0) {
                    // Skip the header row
                    rowNumber++;
                    continue;
                }
                Cell cell1 = row.getCell(0);
                String column1 = cell1.getStringCellValue();
                Cell cell2 = row.getCell(1);
                String column2 = cell2.getStringCellValue();
                Cell cell3 = row.getCell(2);
                String column3 = cell3.getStringCellValue();
                statement.setString(1, column1);
                statement.setString(2, column2);
                statement.setString(3, column3);
                statement.executeUpdate();
            }
            workbook.close();
            statement.close();
            connection.close();
            System.out.println("Data inserted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

总结

在Java中,Excel表的读取、写入和数据库交互是一种高效、灵活且强大的编程实践。通过Apache POI库,Java可以轻松地解析Excel文件,提取数据并将其转换为可操作的Java对象。这样,开发人员可以轻松处理大量数据,实现复杂的业务逻辑,并为用户提供更加智能和便捷的功能。

而在与数据库交互方面,Java提供了JDBC作为标准的数据库连接技术,使得Java应用程序可以与各种关系型数据库无缝连接,实现数据的持久化和读取。此外,ORM框架如Hibernate则进一步简化了数据库操作,将Java对象与数据库表之间的映射关系抽象化,使得开发人员能够以纯粹的面向对象方式来处理数据库数据。

这些强大而高效的功能使得Java成为了在数据处理领域的首选语言。无论是小型的数据处理任务还是复杂的企业级应用,Java都能胜任。它不仅提供了稳定可靠的数据处理能力,还使得开发人员能够以更加直观和便捷的方式进行编码,极大地提高了开发效率和代码质量。

在Java的引领下,Excel表的读取、写入和数据库交互不再是一项繁重的任务,而是变得充满乐趣和创造力。随着技术的不断演进,Java将继续为开发人员提供更多更强大的工具和框架,让数据处理变得更加简单而又强大,为应用程序的发展带来更广阔的可能性。

相关文章
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
SQL 关系型数据库 MySQL
如何将Excel表的数据导入RDS MySQL数据库?
本文介绍如何通过数据管理服务DMS将Excel文件(转为CSV格式)导入RDS MySQL数据库,涵盖建表、编码设置、导入模式选择及审批执行流程,并提供操作示例与注意事项。
|
10月前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
427 94
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
3393 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
10月前
|
Java 关系型数据库 MySQL
Java汽车租赁系统源码(含数据库脚本)
Java汽车租赁系统源码(含数据库脚本)
328 4
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
472 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
11月前
|
JavaScript 前端开发 数据可视化
20.6K star!Excel级交互体验!这款开源Web表格神器绝了!
Handsontable 是一款功能强大的 JavaScript 数据表格组件,提供类 Excel 的交互体验。支持实时协作、数据绑定、公式计算等企业级功能,可轻松集成到 React/Vue/Angular 等主流框架。
2194 11
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
633 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
11月前
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
467 17
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
1757 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡