如何用Java读取Excel文件写到数据库中
问题描述
我们需要将一个Excel文件中的数据写入到数据库中。这个Excel文件包含了一些表格数据,每行数据对应数据库中的一条记录。我们需要通过Java程序读取Excel文件,将数据提取出来,并插入到数据库中。
解决方案
我们可以使用Apache POI库来读取Excel文件,使用JDBC连接数据库,并使用SQL语句将数据插入到数据库中。
1. 导入依赖
首先,我们需要在项目的pom.xml文件中添加以下依赖:
```xml
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
2. 读取Excel文件
我们可以使用Apache POI库来读取Excel文件。我们需要创建一个Workbook
对象,然后通过它来获取Sheet
对象和Row
对象,进而读取数据。
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ExcelReader {
public static void main(String[] args) {
try {
// 读取Excel文件
FileInputStream fis = new FileInputStream(new File("data.xlsx"));
Workbook workbook = new XSSFWorkbook(fis);
// 获取第一个Sheet
Sheet sheet = workbook.getSheetAt(0);
// 遍历每一行
for (Row row : sheet) {
// 遍历每一列
for (Cell cell : row) {
// 读取单元格的值
String value = cell.getStringCellValue();
System.out.print(value + "\t");
}
System.out.println();
}
// 关闭文件流
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 插入数据到数据库
我们可以使用JDBC来插入数据到数据库。首先,我们需要建立数据库连接,然后执行插入数据的SQL语句。
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DatabaseWriter {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
try {
// 连接数据库
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
// 准备插入数据的SQL语句
String sql = "INSERT INTO mytable (column1, column2) VALUES (?, ?)";
statement = connection.prepareStatement(sql);
// 设置参数并执行插入数据的SQL语句
statement.setString(1, "value1");
statement.setString(2, "value2");
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接和预编译语句
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4. 将Excel数据写入数据库
现在,我们可以将读取Excel文件和插入数据到数据库的代码结合起来,完成将Excel数据写入数据库的功能。
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ExcelToDatabase {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
try {
// 连接数据库
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
// 读取Excel文件
FileInputStream fis = new FileInputStream(new File("data.xlsx"));
Workbook workbook = new XSSFWorkbook(fis);
// 获取第一个Sheet
Sheet sheet = workbook.getSheetAt(0);
// 遍历每一行
for (Row row : sheet) {
// 准备插入数据的SQL语