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将继续为开发人员提供更多更强大的工具和框架,让数据处理变得更加简单而又强大,为应用程序的发展带来更广阔的可能性。

相关文章
|
2月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
84 0
|
25天前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
53 5
|
2月前
|
存储 SQL 关系型数据库
PHP与数据库交互:从基础到进阶
【10月更文挑战第9天】在编程的世界里,数据是流动的血液,而数据库则是存储这些珍贵资源的心脏。PHP作为一门流行的服务器端脚本语言,其与数据库的交互能力至关重要。本文将带你从PHP与数据库的基本连接开始,逐步深入到复杂查询的编写和优化,以及如何使用PHP处理数据库结果。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技巧,让你在PHP和数据库交互的道路上更加从容不迫。
|
19天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
33 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
27天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
48 3
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
58 2
|
1月前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
50 2
|
1月前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
30 4
|
2月前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
59 6
如何用java的虚拟线程连接数据库

热门文章

最新文章