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天前
|
Java
java导出复杂excel
java导出复杂excel
|
2天前
|
Java
java的excel列行合并模版
java的excel列行合并模版
|
2天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
8 0
|
2天前
|
Java 关系型数据库 MySQL
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
|
2天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
2天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
4天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
4天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
9 0
|
7天前
|
SQL Java 分布式数据库
实现HBase表和RDB表的转化(附Java源码资源)
该文介绍了如何将数据从RDB转换为HBase表,主要涉及三个来源:RDB Table、Client API和Files。文章重点讲解了RDB到HBase的转换,通过批处理思想,利用RDB接口批量导出数据并转化为`List&lt;Put&gt;`,然后导入HBase。目录结构包括配置文件、RDB接口及实现类、HBase接口及实现类,以及一个通用转换器接口和实现。代码中,`RDBImpl`负责从RDB读取数据并构造`Put`对象,`HBaseImpl`则负责将`Put`写入HBase表。整个过程通过配置文件`transfer.properties`管理HBase和RDB的映射关系。
22 3
实现HBase表和RDB表的转化(附Java源码资源)
|
11天前
|
SQL Java 数据库连接
17:数据库连接池与Servlet整合-Java Web
17:数据库连接池与Servlet整合-Java Web
22 3