java web 如何实现excel导入数据库功能 并且判断是否重复添加

在 Java Web 应用中实现 Excel 文件导入数据库功能,并且在导入时检查数据是否重复,可以通过以下步骤完成:

1. 环境准备

确保你已经设置好 Java Web 开发环境,并且有一个支持的数据库(如 MySQL、PostgreSQL)。还需要一个支持读取和解析 Excel 文件的库,如 Apache POI。

2. 添加依赖库

在你的 Java 项目中,添加 Apache POI 依赖(用于读取 Excel 文件)和数据库连接池依赖(如 HikariCP)。如果使用 Maven,编辑 pom.xml 文件:

xml
<dependencies> <!-- Apache POI for Excel file handling --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.1.2</version> </dependency> <!-- Database connection pool (HikariCP) --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency> <!-- JDBC Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> </dependencies>

3. 读取 Excel 文件

使用 Apache POI 读取 Excel 文件内容。

ExcelReader.java

java
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ExcelReader { public static List<List<String>> readExcel(String filePath) throws IOException { List<List<String>> data = new ArrayList<>(); try (FileInputStream fis = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { List<String> rowData = new ArrayList<>(); for (Cell cell : row) { rowData.add(cell.toString()); } data.add(rowData); } } return data; } }

4. 检查重复数据并插入数据库

在将数据插入数据库之前,首先检查数据是否重复。你可以通过查询数据库中的现有记录来实现。

DatabaseUtil.java

java
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DatabaseUtil { private static HikariDataSource dataSource; static { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/your_database"); config.setUsername("your_username"); config.setPassword("your_password"); config.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource = new HikariDataSource(config); } public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } public static boolean isDuplicate(String value) throws SQLException { String query = "SELECT COUNT(*) FROM your_table WHERE your_column = ?"; try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(query)) { ps.setString(1, value); try (ResultSet rs = ps.executeQuery()) { rs.next(); return rs.getInt(1) > 0; } } } public static void insertData(String value) throws SQLException { String query = "INSERT INTO your_table (your_column) VALUES (?)"; try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(query)) { ps.setString(1, value); ps.executeUpdate(); } } }

5. 整合 Excel 读取和数据库插入

将 Excel 读取和数据库插入功能整合在一个服务中。

DataImportService.java

java
import java.io.IOException; import java.sql.SQLException; import java.util.List; public class DataImportService { public void importData(String excelFilePath) { try { List<List<String>> data = ExcelReader.readExcel(excelFilePath); for (List<String> row : data) { for (String cell : row) { if (!DatabaseUtil.isDuplicate(cell)) { DatabaseUtil.insertData(cell); } } } } catch (IOException | SQLException e) { e.printStackTrace(); } } }

6. 在 Web 应用中使用

创建一个 Servlet 或 Controller 处理文件上传并调用 DataImportService 进行数据导入。

DataImportServlet.java

java
import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import java.io.IOException; @MultipartConfig public class DataImportServlet extends HttpServlet { private DataImportService dataImportService = new DataImportService(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart = request.getPart("file"); String filePath = getServletContext().getRealPath("/") + "uploads/" + filePart.getSubmittedFileName(); // Save file to server filePart.write(filePath); // Import data dataImportService.importData(filePath); response.getWriter().println("Data import completed."); } }

总结

在 Java Web 应用中实现 Excel 导入数据库功能并检查重复数据的步骤包括:配置项目依赖、编写 Excel 读取代码、检查数据库中的重复数据、插入数据、以及将这些功能整合到 Web 应用的 Servlet 或 Controller 中处理文件上传。使用 Apache POI 库读取 Excel 文件,通过 JDBC 连接数据库,并在数据插入之前进行重复检查。

关键字

Java Web, Excel 导入, 数据库, Apache POI, 重复检查, JDBC, 数据插入, Servlet, 文件上传, 数据导入