You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package Tools.DataEase;
import Tools.DataEase.Util.DataEaseUtil;
import cn.hutool.core.io.FileUtil;
import com.dsideal.QingLong.Util.CommonUtil;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import java.io.File;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ExcelExport {
public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
DataEaseUtil.Init();
//JDBC读取sourceSql,可以按列序号获取源数据
Class.forName(PropKit.get("driverClassName"));
Connection conn = DriverManager.getConnection(PropKit.get("read_jdbcUrl"), PropKit.get("read_user"), PropKit.get("read_password"));
Statement statement = conn.createStatement();
//文本文件
if (!FileUtil.exist(DataEaseUtil.DataEaseDirectory)) {
System.out.println("没有找到要导入的目录!");
System.exit(0);
}
File[] files = FileUtil.ls(DataEaseUtil.DataEaseDirectory);
List<String> sqlList = new ArrayList<>();
// 遍历文件数组
for (File file : files) {
String name = file.getName().substring(file.getName().lastIndexOf(".") + 1);
if (!name.toLowerCase().equals("txt")) continue;
// 获取文件名
String fileName = file.getAbsolutePath();
// 读取文件内容
String content = FileUtil.readUtf8String(fileName);
// 获取表名
String tableName = content.split("\r\n")[2];
CommonUtil.log("正在处理:" + file.getName());
// 使用FileUtil按行读取文件
List<String> lines = FileUtil.readLines(new File(fileName), "UTF-8");
// 遍历每一行内容
boolean flag = false;
StringBuilder sb = new StringBuilder();
for (String line : lines) {
// 处理每一行的内容
if (line.startsWith("*/")) {
flag = true;
continue;
}
if (line.startsWith("--")) continue;
if (flag) sb.append(line + " ");
}
String sourceSql = sb.toString().trim();
if (!sourceSql.endsWith(";")) {
CommonUtil.log("文件" + file.getName() + "没有以;号结尾,请修改后再次运行本程序!");
System.exit(0);
}
String[] array = sourceSql.split(";");
int lastSelectLine = -1;
for (int i = array.length - 1; i >= 0; i--) {
if (array[i].toLowerCase().trim().startsWith("select")) {
lastSelectLine = i;
break;
}
}
if (lastSelectLine == -1) {
CommonUtil.log("没有找到select查询语句程序无法继续运行");
System.exit(0);
}
sourceSql = array[lastSelectLine];
for (int i = 0; i < array.length; i++) {
if (i == lastSelectLine) continue;
String execSql = array[i];
CommonUtil.log("正在执行更新类Sql:" + execSql);
try {
PreparedStatement p = conn.prepareStatement(execSql);
p.executeUpdate();
} catch (Exception err) {
CommonUtil.log("执行语句失败,失败细节:" + err);
}
}
//有哪些列
List<String> cList = DataEaseUtil.getColumns(tableName);
ResultSet rs = statement.executeQuery(sourceSql);
ResultSetMetaData rsmd = rs.getMetaData();
//ResultSet的总列数
int columnCount = rsmd.getColumnCount();
//获取表的主键ID
String sql = "select dataease_uuid from " + tableName;
List<Record> fList = Db.find(sql);
int idx = 0;
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
String colName = cList.get(i).toLowerCase();
sql = "update " + tableName + " set " + colName + "='"
+ rs.getString(i) + "' where dataease_uuid='"
+ fList.get(idx).getStr("dataease_uuid") + "';";
sqlList.add(sql);
}
idx++;
}
}
//关闭数据库
statement.close();
conn.close();
Db.batch(sqlList, 500);
CommonUtil.log("恭喜,数据导出并导入成功!");
}
}