From 9387daf1a9582e352b404704beeaac3787ea5af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Wed, 30 Oct 2024 16:04:59 +0800 Subject: [PATCH] 'commit' --- .../com/dsideal/base/Tools/GenerateExcel.java | 133 ------------------ .../base/Tools/addDataEaseExcelPrimary.java | 87 ++++++++++++ 2 files changed, 87 insertions(+), 133 deletions(-) delete mode 100644 src/main/java/com/dsideal/base/Tools/GenerateExcel.java create mode 100644 src/main/java/com/dsideal/base/Tools/addDataEaseExcelPrimary.java diff --git a/src/main/java/com/dsideal/base/Tools/GenerateExcel.java b/src/main/java/com/dsideal/base/Tools/GenerateExcel.java deleted file mode 100644 index d5d9a68a..00000000 --- a/src/main/java/com/dsideal/base/Tools/GenerateExcel.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.dsideal.base.Tools; - -import cn.hutool.core.io.FileUtil; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; - -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - -public class GenerateExcel { - - public static void exportResultSetToExcel(ResultSet resultSet, String excelFilePath) throws SQLException, IOException { - // 创建一个新的Excel工作簿 - Workbook workbook = new XSSFWorkbook(); - // 创建一个工作表 - Sheet sheet = workbook.createSheet("查询结果"); - - // 创建表头单元格 - Row headerRow = sheet.createRow(0); - ResultSetMetaData metaData = resultSet.getMetaData(); - int columnCount = metaData.getColumnCount(); - - // 设置表头单元格样式 - CellStyle headerStyle = workbook.createCellStyle(); - headerStyle.setBorderTop(BorderStyle.THIN); - headerStyle.setBorderBottom(BorderStyle.THIN); - headerStyle.setBorderLeft(BorderStyle.THIN); - headerStyle.setBorderRight(BorderStyle.THIN); - headerStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex()); - headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - headerStyle.setFont(workbook.createFont()); - //headerStyle.getFont().setBold(true); - - for (int i = 1; i <= columnCount; i++) { - Cell cell = headerRow.createCell(i - 1); - cell.setCellValue(metaData.getColumnName(i)); - cell.setCellStyle(headerStyle); - } - - headerRow.setHeightInPoints(28); // 设置表头行高为28 - - // 填充数据 - int rowNumber = 1; - while (resultSet.next()) { - Row row = sheet.createRow(rowNumber++); - row.setHeightInPoints(28); // 设置数据行高为28 - - // 设置数据单元格样式 - CellStyle dataStyle = workbook.createCellStyle(); - dataStyle.setBorderTop(BorderStyle.THIN); - dataStyle.setBorderBottom(BorderStyle.THIN); - dataStyle.setBorderLeft(BorderStyle.THIN); - dataStyle.setBorderRight(BorderStyle.THIN); - - for (int i = 1; i <= columnCount; i++) { - Cell cell = row.createCell(i - 1); - Object value = resultSet.getObject(i); - if (value != null) cell.setCellValue(value.toString()); - cell.setCellStyle(dataStyle); - } - } - - // 自动调整列宽 - for (int i = 0; i < columnCount; i++) { - sheet.autoSizeColumn(i); - } - - // 将工作簿写入文件 - try (FileOutputStream fileOut = new FileOutputStream(excelFilePath)) { - workbook.write(fileOut); - } - // 关闭工作簿和结果集 - workbook.close(); - resultSet.close(); - } - - public static List getFiles(String path) { - List files = new ArrayList<>(); - File file = new File(path); - File[] tempList = file.listFiles(); - - for (int i = 0; i < tempList.length; i++) { - if (tempList[i].isFile()) { - files.add(tempList[i].toString()); - } - } - return files; - } - - public static void main(String[] args) throws ClassNotFoundException, SQLException { - // 指定目录路径 - String directoryPath = "C:\\Users\\Administrator\\Documents\\Navicat\\SQLite\\Servers\\长春市教育数据统计2024\\main"; - // SQLite数据库的URL - String url = "jdbc:sqlite:C:/Users/Administrator/Desktop/DataBase/edudb_gather_220100000000_full_fullreport.db"; - - // 加载SQLite的JDBC驱动 - Class.forName("org.sqlite.JDBC"); - - // 建立连接 - Connection connection = DriverManager.getConnection(url); - Statement statement = connection.createStatement(); - // 遍历所有文件 - List files = getFiles(directoryPath); - int cnt = 0;//有问题的查询个数 - for (String file : files) { - if (!file.contains(".sql")) continue; - String sql = FileUtil.readUtf8String(file); - try { - String excelFilePath = file.replace(".sql", ".xlsx"); - ResultSet rs = statement.executeQuery(sql); - //如果数据集是空的,返回 - if (!rs.isBeforeFirst()) continue; - //否则导出 - cnt++; - exportResultSetToExcel(rs, excelFilePath); - } catch (Exception err) { - System.out.println(err); - System.out.println(file + "无法执行,请检查原因!"); - } - } - connection.close(); - if (cnt > 0) { - System.out.println("导出问题表" + cnt + "个!"); - } else { - System.out.println("全部成功!"); - } - } -} diff --git a/src/main/java/com/dsideal/base/Tools/addDataEaseExcelPrimary.java b/src/main/java/com/dsideal/base/Tools/addDataEaseExcelPrimary.java new file mode 100644 index 00000000..7412618e --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/addDataEaseExcelPrimary.java @@ -0,0 +1,87 @@ +package com.dsideal.base.Tools; + +import com.dsideal.base.Plugin.YamlProp; +import com.jfinal.kit.Prop; +import com.jfinal.plugin.activerecord.ActiveRecordPlugin; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; +import com.jfinal.plugin.activerecord.dialect.MysqlDialect; +import com.jfinal.plugin.hikaricp.HikariCpPlugin; + +import java.io.File; +import java.util.List; + +public class addDataEaseExcelPrimary { + + + public static void main(String[] args) { + //加载配置文件 + String configFile = "application_dev.yaml"; + Prop PropKit = new YamlProp(configFile); + HikariCpPlugin arpPlugin = new HikariCpPlugin(PropKit.get("mysql.jdbcUrl"), PropKit.get("mysql.user"), + PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName")); + arpPlugin.start(); + + HikariCpPlugin dataEasePlugin = new HikariCpPlugin(PropKit.get("mysql.jdbcUrl").replace("ds_db", "dataease"), PropKit.get("mysql.user"), + PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName")); + dataEasePlugin.start(); + + // 配置ActiveRecord插件 + ActiveRecordPlugin arp = new ActiveRecordPlugin("master", arpPlugin); + arp.setDialect(new MysqlDialect()); + + ActiveRecordPlugin arpDataEase = new ActiveRecordPlugin("dataease", dataEasePlugin); + arpDataEase.setDialect(new MysqlDialect()); + + //遍历sql目录下所有的sql文件 + File sqlDir; + String basePath = addDataEaseExcelPrimary.class.getResource("/").getPath(); + sqlDir = new File(basePath + "/Sql"); + File[] sqlFiles = sqlDir.listFiles(); + for (File sqlFile : sqlFiles != null ? sqlFiles : new File[0]) { + //只加载.sql文件 + if (sqlFile.getName().indexOf(".sql") > 0) { + arp.addSqlTemplate("/Sql/" + sqlFile.getName()); + arpDataEase.addSqlTemplate("/Sql/" + sqlFile.getName()); + } + } + arp.start(); + arpDataEase.start(); + + //处理表,增加列 + // 查询所有以 excel_ 开头的表 + List tables = Db.use("dataease").find("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dataease' AND TABLE_NAME LIKE 'excel\\_%'"); + + for (Record table : tables) { + String tableName = table.getStr("TABLE_NAME"); + if (!hasPrimaryKey(tableName)) { + addPrimaryKeyAndTimestamp(tableName); + System.out.println("Processed table: " + tableName); + } + } + } + + + // 检查表是否存在主键 + public static boolean hasPrimaryKey(String tableName) { + String sql = "SELECT COUNT(*) as c FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND CONSTRAINT_TYPE = 'PRIMARY KEY'"; + return Db.use("dataease").queryInt(sql, "dataease", tableName) > 0; + } + + // 添加主键列和时间戳列,并设置为主键 + public static void addPrimaryKeyAndTimestamp(String tableName) { + // 添加 id 列和 update_ts 列 + String alterTableSql = "ALTER TABLE `" + tableName + "` ADD COLUMN `id` CHAR(36) NULL, ADD COLUMN `update_ts` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP"; + Db.use("dataease").update(alterTableSql); + + + // 生成 UUID 并更新 id 列和 update_ts 列 + String updateSql = "UPDATE `" + tableName + "` SET `id` = UUID(), `update_ts` = CURRENT_TIMESTAMP"; + Db.use("dataease").update(updateSql); + + //设置主键 + String sql="ALTER TABLE `" + tableName +"` MODIFY COLUMN `id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,ADD PRIMARY KEY (`ID`)"; + System.out.println(sql); + Db.use("dataease").update(sql); + } +}