下面是“Java实现批量导入Excel表格数据到数据库”的完整攻略:
1. 准备工作
在Java中实现批量导入Excel数据到数据库,需要先进行以下准备工作:
- 导入相关依赖库
- 配置数据库连接
- 创建表格对应的实体类
1.1 导入相关依赖库
需要导入以下几个依赖库:
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
</dependencies>
1.2 配置数据库连接
在Java中连接数据库需要一个数据源,推荐使用Druid数据源,以下是数据源的配置:
import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
public class DataSourceUtils {
public static DataSource getDataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/test");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
1.3 创建表格对应的实体类
根据表格结构,创建对应的实体类,示例代码如下:
public class User {
private String id;
private String name;
private Integer age;
// set、get方法省略
}
2. 实现导入Excel数据到数据库的主要代码
2.1 创建DAO工具类
此处采用Apache Commons DbUtils实现操作数据库,创建一个DAO工具类UserDAO:
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;
public class UserDAO {
private DataSource dataSource;
public UserDAO(DataSource dataSource) {
this.dataSource = dataSource;
}
public void batchSave(List<User> users) throws SQLException {
QueryRunner qr = new QueryRunner(dataSource);
String sql = "INSERT INTO user(id, name, age) VALUES (?, ?, ?)";
Object[][] params = new Object[users.size()][3];
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
params[i][0] = user.getId();
params[i][1] = user.getName();
params[i][2] = user.getAge();
}
qr.batch(sql, params);
}
public List<User> findAll() throws SQLException {
QueryRunner qr = new QueryRunner(dataSource);
String sql = "SELECT * FROM user";
return qr.query(sql, new BeanListHandler<>(User.class));
}
}
2.2 实现Excel数据的读取和转换
创建ExcelReader工具类,实现对Excel数据的读取和转换,其中导入的Excel文件名为users.xlsx,包含三列数据:id、name、age。
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.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ExcelReader {
public static List<User> readUsersFromExcel() throws IOException {
List<User> users = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(new File("users.xlsx"))) {
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
if (row.getRowNum() == 0) {
// 跳过第一行表头
continue;
}
User user = new User();
user.setId(getStringCellValue(row.getCell(0)));
user.setName(getStringCellValue(row.getCell(1)));
user.setAge((int) row.getCell(2).getNumericCellValue());
users.add(user);
}
}
return users;
}
private static String getStringCellValue(Cell cell) {
cell.setCellType(CellType.STRING);
return cell.getStringCellValue().trim();
}
}
2.3 实现批量导入Excel数据的入口方法
在程序入口处,调用以上DAO和ExcelReader工具类,实现批量导入Excel数据到数据库:
public class Main {
public static void main(String[] args) throws Exception {
DataSource dataSource = DataSourceUtils.getDataSource();
UserDAO userDAO = new UserDAO(dataSource);
List<User> users = ExcelReader.readUsersFromExcel();
userDAO.batchSave(users);
List<User> userList = userDAO.findAll();
for (User user : userList) {
System.out.println(user);
}
}
}
这段代码分别进行了三个操作:
- 读取Excel文件,获取用户信息列表。
- 调用UserDAO中的batchSave()方法进行批量插入操作。
- 查询全部数据,输出在控制台。
3. 示例
在示例中,假设Excel表格中有5个用户信息,通过以上代码批量导入到数据库中。
3.1 Excel文件内容
id | name | age |
---|---|---|
1 | 张三 | 22 |
2 | 李四 | 23 |
3 | 王五 | 24 |
4 | 小黑 | 21 |
5 | 小白 | 26 |
3.2 输出结果
输出结果如下:
User{id='1', name='张三', age=22}
User{id='2', name='李四', age=23}
User{id='3', name='王五', age=24}
User{id='4', name='小黑', age=21}
User{id='5', name='小白', age=26}
以上即是Java实现批量导入Excel表格数据到数据库的完整攻略,包含了基本的准备工作和关键代码实现,同时也包含了两个示例供参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现批量导入Excel表格数据到数据库 - Python技术站