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
javaimport 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
javaimport 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
javaimport 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
javaimport 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, 文件上传, 数据导入