(Java程序)Excel自动生成mysql表

读取excel生成字段

最近项目中遇到了一个费时间的事,就花了点时间写了一个小程序来做这件事。

description:现在在项目的前期设计阶段,需要从excel的数据库表格字段生成数据库,开始是手动搬砖,但是碰到了一个按照时间自增生成的列,一个表需要生成几百列的字段,手敲感觉要命,就写了以下的小程序来完成数据库表的生成和字段的自动生成。如下图,有字段是要分段生成的。

以下程序生成的数据库表名就是excel的sheet的名字,类型默认是bigint(20),varchar(200),double(3,8),datatime。

package service;


import bean.Excel;
import bean.Table;
import jxl.Sheet;
import jxl.Workbook;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

/**
 * @author :yangqingbo
 * @date :Created in 2019/9/25 15:57
 * @description:excel自动生成mysql表结构
 *      path:excel表格的路径,注意此程序只能使用.xls的表格
 *      url: mysql的连接信息
 *      username:mysql的用户名
 *      password:mysql的密码
 *      drivernaem:对应pom中的mysql版本,(5.x和8.x的版本驱动不同,我这里是8.x的,5.x的驱动com.mysql.jdbc.Driver)
 * 本程序需要使用到的依赖:net.sourceforge.jexcelapi.jxl.2.6.12;和对应mysql驱动版本的mysql架包;jdk8
 */
public class ExcelTest {

    static String path = "F:\\Excel\\hah.xls";
    static String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    static String userName = "root";
    static String password = "123456";
    static String driverName = "com.mysql.cj.jdbc.Driver";

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) t
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以使用 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 注入攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值