poi导入excel,判断表的最后一行是否有数据,空数据不做导入
时间: 2024-03-26 07:39:23 浏览: 157
要判断表的最后一行是否有数据,可以使用 Apache POI 的 Sheet 类的 getLastRowNum() 方法来获取表的最后一行的行号,然后再使用 Row 类的 getPhysicalNumberOfCells() 方法来获取该行的单元格数,如果单元格数为 0,则说明该行没有数据。
以下是修改过的示例代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
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 ExcelToDatabase {
public static void main(String[] args) {
String jdbcUrl = "jdbc:mysql://localhost:3306/mydb";
String username = "root";
String password = "password";
String excelFilePath = "data.xlsx";
try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
String sql = "INSERT INTO mytable (col1, col2, col3) VALUES (?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
int cellCount = row.getPhysicalNumberOfCells();
if (cellCount == 0) {
continue;
}
Cell cell1 = row.getCell(0);
Cell cell2 = row.getCell(1);
Cell cell3 = row.getCell(2);
statement.setString(1, cell1.getStringCellValue());
statement.setString(2, cell2.getStringCellValue());
statement.setDouble(3, cell3.getNumericCellValue());
statement.executeUpdate();
}
workbook.close();
inputStream.close();
statement.close();
} catch (SQLException | IOException e) {
e.printStackTrace();
}
}
}
```
这个示例代码会跳过没有数据的行,只将有数据的行插入到数据库中。注意,这个示例代码并没有处理表头行,如果你的 Excel 文件中包含表头行,需要在代码中进行特殊处理,以避免将表头行插入到数据库中。
阅读全文