java读取excel,根据excel的列名自动生成mysql表并写入
时间: 2023-07-06 21:34:37 浏览: 357
您可以使用 Apache POI 库读取 Excel 文件,并根据 Excel 文件中的列名自动生成 MySQL 表。接下来,您可以使用 JDBC 将数据写入该表中。首先,您需要下载并导入以下库:
- poi-ooxml:用于读取 Excel 文件
- mysql-connector-java:用于连接 MySQL 数据库
接下来,您可以使用以下代码从 Excel 文件中读取数据,并根据 Excel 文件中的列名自动生成 MySQL 表:
```java
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelToMySQL {
public static void main(String[] args) {
try {
// 读取 Excel 文件
String file = "data.xlsx";
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
// 数据库连接信息
String host = "localhost";
int port = 3306;
String user = "root";
String password = "password";
String database = "test";
// 连接数据库并创建表
Connection conn = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, user, password);
Statement stmt = conn.createStatement();
String tableName = "my_table";
List<String> columns = new ArrayList<>();
Row firstRow = sheet.getRow(0);
for (Cell cell : firstRow) {
columns.add(cell.getStringCellValue());
}
String createTableSQL = "CREATE TABLE IF NOT EXISTS " + tableName + " (" + String.join(",", columns) + ")";
stmt.executeUpdate(createTableSQL);
// 将数据写入 MySQL 数据库中
int numRows = sheet.getLastRowNum() + 1;
for (int i = 1; i < numRows; i++) {
Row row = sheet.getRow(i);
List<String> values = new ArrayList<>();
for (int j = 0; j < columns.size(); j++) {
Cell cell = row.getCell(j);
String value = "";
if (cell != null) {
switch (cell.getCellType()) {
case STRING:
value = "'" + cell.getStringCellValue() + "'";
break;
case NUMERIC:
value = String.valueOf(cell.getNumericCellValue());
break;
case BOOLEAN:
value = String.valueOf(cell.getBooleanCellValue());
break;
default:
value = "";
}
}
values.add(value);
}
String insertSQL = "INSERT INTO " + tableName + " (" + String.join(",", columns) + ") VALUES (" + String.join(",", values) + ")";
stmt.executeUpdate(insertSQL);
}
// 关闭数据库连接
stmt.close();
conn.close();
workbook.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
这段代码会将 Excel 文件中的数据写入名为 my_table 的表中。如果表不存在,则会自动创建。请注意,此代码只是示例代码,实际使用中应该使用 PreparedStatement 以避免 SQL 注入攻击。
阅读全文