关于如何用Java解析Excel文件并把数据存入数据库,下面提供一份完整的攻略供你参考。
准备工作
在开始操作之前,需要你先准备好以下工具和环境:
- JDK:Java开发环境。你可以从Oracle官网上下载安装最新版的JDK。
- MySQL:数据库系统。你可以根据需要安装在本地或者使用云服务商提供的MySQL服务。
- Apache POI:用于操作Excel文件的Java类库。可以从官网上下载最新版的Apache POI。
解析Excel文件
首先需要用Apache POI将Excel文件读取到Java的内存中,然后逐行解析每个单元格中的数据。
下面是读取Excel文件并输出内容的示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
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 ExcelParser {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("data.xlsx"));
Workbook workbook = new XSSFWorkbook(file);
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
}
}
System.out.println("");
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个示例代码中,我们首先创建一个FileInputStream对象来读取Excel文件,并通过XSSFWorkbook将Excel文件转换成Java的内存对象。
然后,我们获取第一个Sheet并通过iteator来遍历每一行,再通过iterator遍历每个单元格。根据单元格的类型,我们输出不同的内容。
存储数据到数据库
解析Excel文件之后,我们需要把获取到的数据存储到数据库中。和读取Excel文件一样,我们也需要通过Java提供的JDBC工具连接到MySQL数据库,并把数据写入到表中。
下面是将Excel文件中的数据存储到MySQL数据库的示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Iterator;
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 ExcelToMySQL {
public static void main(String[] args) {
String jdbcURL = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "";
String excelFilePath = "data.xlsx";
int batchSize = 20;
Connection connection = null;
try {
long start = System.currentTimeMillis();
FileInputStream inputStream = new FileInputStream(excelFilePath);
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet firstSheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = firstSheet.iterator();
connection = DriverManager.getConnection(jdbcURL, username, password);
connection.setAutoCommit(false);
String sql = "INSERT INTO users(name, email, password) VALUES (?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
int count = 0;
rowIterator.next(); // skip the header row
while (rowIterator.hasNext()) {
Row nextRow = rowIterator.next();
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext()) {
Cell nextCell = cellIterator.next();
int columnIndex = nextCell.getColumnIndex();
switch (columnIndex) {
case 0:
String name = nextCell.getStringCellValue();
statement.setString(1, name);
break;
case 1:
String email = nextCell.getStringCellValue();
statement.setString(2, email);
break;
case 2:
String password = nextCell.getStringCellValue();
statement.setString(3, password);
break;
}
}
statement.addBatch();
if (count % batchSize == 0) {
statement.executeBatch();
}
}
workbook.close();
// execute the remaining queries
statement.executeBatch();
connection.commit();
connection.close();
long end = System.currentTimeMillis();
System.out.printf("Import done in %d ms\n", (end - start));
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个示例代码中,我们首先定义了连接MySQL数据库的URL、用户名和密码等信息。
然后,我们读入Excel文件,并利用JDBC工具连接到MySQL数据库。接着,我们遍历Excel文件中的每一行数据,并通过JDBC将其插入到MySQL数据库中。
值得注意的是,我们通过设置batchSize来优化性能,每20行数据提交一次。
至此,我们就将Java解析Excel文件并把数据存入数据库的全部过程详细讲解完毕。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java解析Excel文件并把数据存入数据库 - Python技术站