下面我将详细讲解“Java将excel中的数据导入到mysql中”的完整攻略。本攻略总体流程分为三步:读取Excel数据、连接MySQL数据库、将数据导入到数据库中。具体过程如下:
1. 读取Excel数据
首先需要使用Java中的一些类库来读取Excel表格数据。在这里我们使用Apache POI类库,它能够帮助我们读取和操作Excel表格文件。
代码示例1:
File file = new File("test.xlsx");
Workbook workbook = null;
try{
//创建工作簿对象
workbook = WorkbookFactory.create(file);
//获取sheet数目
int sheets = workbook.getNumberOfSheets();
//循环遍历每个sheet
for(int i = 0; i < sheets; i++){
Sheet sheet = workbook.getSheetAt(i);
//获取行数
int rows = sheet.getPhysicalNumberOfRows();
//循环遍历每一行
for(int j = 0; j < rows; j++){
Row row = sheet.getRow(j);
//获取列数
int cells = row.getPhysicalNumberOfCells();
//循环遍历每一列
for(int k = 0; k < cells; k++){
Cell cell = row.getCell(k);
//获取单元格中的数据
String value = cell.getStringCellValue();
System.out.println(value);
}
System.out.println();
}
}
}catch(Exception e){
e.printStackTrace();
}
这段代码中,我们首先创建了一个File
对象来表示Excel表格文件。然后使用WorkbookFactory
类的create
方法来创建一个工作簿对象。通过getNumberOfSheets
方法获取表格包含的sheet数目,然后循环遍历每个sheet,通过getPhysicalNumberOfRows
方法获取每个sheet包含的行数。再通过循环遍历每一行,使用getPhysicalNumberOfCells
方法获取每一行包含的列数。最后使用getCell
方法获取每个单元格对象,使用getStringCellValue
方法获取单元格中的数据。
代码示例2:
File file = new File("test.xlsx");
Workbook workbook = null;
try{
//创建工作簿对象
workbook = WorkbookFactory.create(file);
//获取第一个sheet
Sheet sheet = workbook.getSheetAt(0);
//获取表头所在行
Row titleRow = sheet.getRow(0);
//获取列数
int cells = titleRow.getPhysicalNumberOfCells();
//创建一个数组用来保存表头
String[] titles = new String[cells];
//循环遍历表头
for(int i = 0; i < cells; i++){
Cell cell = titleRow.getCell(i);
titles[i] = cell.getStringCellValue();
}
//获取数据行数
int rows = sheet.getPhysicalNumberOfRows();
//循环遍历每个数据行
for(int i = 1; i < rows; i++){
Row row = sheet.getRow(i);
//创建一个Map用来保存每行数据
Map<String, Object> rowData = new HashMap<>();
//循环遍历每一列
for(int j = 0; j < cells; j++){
Cell cell = row.getCell(j);
//获取单元格中的数据
Object value = null;
switch(cell.getCellType()){
case NUMERIC:
value = cell.getNumericCellValue();
break;
case STRING:
value = cell.getStringCellValue();
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
case FORMULA:
value = cell.getCellFormula();
break;
default:
value = null;
}
rowData.put(titles[j], value);
}
System.out.println(rowData.toString());
}
}catch(Exception e){
e.printStackTrace();
}
这段代码与前面不同的地方在于,这里我们假设Excel表格的第一行是表头,第二行及以后是数据。首先获取第一个sheet对象,然后获取表头所在的行,使用getPhysicalNumberOfCells
方法获取表头包含的列数,循环遍历表头,使用getCell
方法获取单元格对象,使用getStringCellValue
方法获取单元格中的数据。然后通过getPhysicalNumberOfRows
方法获取数据行数,循环遍历每个数据行,使用一个Map对象来保存每行数据,循环遍历每一列,使用getCellType
方法判断单元格中的数据类型,然后使用不同的方法获取单元格中的数据,最后使用表头作为key,将每个单元格的数据保存到Map中。
2. 连接MySQL数据库
连接MySQL数据库需要先加载MySQL驱动,然后使用JDBC API来连接数据库。在这里我们使用了com.mysql.jdbc.Driver
驱动。
代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySqlConnection {
private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
private static Connection connection = null;
public static Connection getConnection() {
if (connection == null) {
synchronized (MySqlConnection.class) {
if (connection == null) {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
}
return connection;
}
}
在这里,我们首先定义了MySQL的连接信息,包括URL、用户名和密码。然后使用静态方法getConnection
来获取数据库连接对象,这个方法使用了双检锁来确保线程安全。在方法中,我们首先加载MySQL驱动,然后使用DriverManager
类的getConnection
方法来获取数据库连接对象。
3. 将数据导入到数据库中
使用JDBC API将数据插入到数据库表中。在这里我们假设导入数据的表格中包含三列,分别是id
、name
和score
。
代码示例:
public class ExcelToMysql {
public static void main(String[] args) {
File file = new File("test.xlsx");
Workbook workbook = null;
try{
//创建工作簿对象
workbook = WorkbookFactory.create(file);
//获取第一个sheet
Sheet sheet = workbook.getSheetAt(0);
//获取数据行数
int rows = sheet.getPhysicalNumberOfRows();
//获取数据库连接对象
Connection connection = MySqlConnection.getConnection();
//创建SQL语句
String sql = "INSERT INTO student (id, name, score) VALUES (?, ?, ?)";
//创建预编译语句对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//循环遍历每个数据行
for(int i = 1; i < rows; i++){
Row row = sheet.getRow(i);
//获取每列的数据
int id = (int) row.getCell(0).getNumericCellValue();
String name = row.getCell(1).getStringCellValue();
double score = row.getCell(2).getNumericCellValue();
//设置预编译语句参数
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);
preparedStatement.setDouble(3, score);
//执行SQL语句
preparedStatement.executeUpdate();
}
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭工作簿对象
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
//关闭数据库连接对象
try {
MySqlConnection.getConnection().close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这段代码中,我们首先获取第一个sheet对象,然后使用getPhysicalNumberOfRows
方法获取数据行数,然后获取MySQL数据库的连接对象。接着创建SQL语句和预编译语句对象,循环遍历每个数据行,使用getCell
方法获取每列的数据,使用setXXX
方法设置预编译语句的参数,然后使用executeUpdate
方法执行SQL语句。最后关闭工作簿对象和数据库连接对象。
以上就是Java将Excel中的数据导入到MySQL中的完整攻略和示例代码,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java将excel中的数据导入到mysql中 - Python技术站