main
gaoshuguang 10 months ago
parent 9535d94676
commit 7f274fbedf

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="SonarLintModuleSettings">
<option name="uniqueId" value="264fc521-6339-4766-8a04-953c6c1bd377" />
</component>
</module>

@ -234,6 +234,13 @@
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.7.16</version> <version>5.7.16</version>
</dependency> </dependency>
<!--sqlite-->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>

@ -0,0 +1,14 @@
package com.nmgs.entity;
import lombok.Data;
/**
* @author: shuguang
* @date: 20230814 10:41
* @description: --9001
*/
@Data
public class PriceLib {
private String idx;
private String begDate;
}

@ -22,6 +22,7 @@ public enum MessageEnum {
("20002", "复制文件失败"), ("20002", "复制文件失败"),
("20003", "数据库连接异常"), ("20003", "数据库连接异常"),
sql("20004", "数据库执行sql失败"), sql("20004", "数据库执行sql失败"),
("20005", "文件压缩失败失败"),

@ -0,0 +1,30 @@
package com.nmgs.test;
import com.nmgs.entity.PriceLib;
import com.nmgs.util.DatabaseUtil;
import com.nmgs.util.ZlibUtil;
/**
* @author: shuguang
* @date: 20250115 10:35
* @description:
*/
public class sqbToZlibTest {
public static void main(String[] args) {
String sqbFilePath = "D:\\桌面\\PriceLib.sqb";
// 指定输出目录
String outputDirectory = "D:\\桌面";
//文件前缀
String filePrefix = "SQB_PRICELIB";
String sqbUrl = "jdbc:sqlite:" + sqbFilePath;
PriceLib priceLib = DatabaseUtil.selectPriceLib("org.sqlite.JDBC", sqbUrl, "SELECT IDX,BEGDATE FROM idx_table");
String idx = priceLib.getIdx();
ZlibUtil.compressPriceSQBToZLIBWithMD5(sqbFilePath, outputDirectory, filePrefix, idx);
}
}

@ -2,6 +2,7 @@ package com.nmgs.util;
import com.nmgs.config.Constant; import com.nmgs.config.Constant;
import com.nmgs.entity.OutPortTest; import com.nmgs.entity.OutPortTest;
import com.nmgs.entity.PriceLib;
import com.nmgs.enumeration.MessageEnum; import com.nmgs.enumeration.MessageEnum;
import com.nmgs.exception.PPException; import com.nmgs.exception.PPException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -10,7 +11,9 @@ import java.sql.Connection;
import java.sql.Date; import java.sql.Date;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -22,6 +25,59 @@ import java.util.Locale;
@Slf4j @Slf4j
public class DatabaseUtil { public class DatabaseUtil {
/**
*
*/
public static PriceLib selectPriceLib(String driverName, String url, String sqlParam) {
PriceLib priceLib = new PriceLib();
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
try {
Locale locale = Locale.getDefault();
locale.setDefault(Locale.CHINA);
Class.forName(driverName);
//数据库连接(连接、账号、密码)
connection = DriverManager.getConnection(url);
if (!connection.isClosed()) {
log.info("{}数据库连接成功", url);
//2.创建statement类对象用来执行SQL语句
statement = connection.createStatement();
log.info("开始执行sql语句{}", sqlParam);
//3.ResultSet类用来存放获取的结果集
//要执行的SQL语句
rs = statement.executeQuery(sqlParam);
while (rs.next()) {
priceLib.setIdx(rs.getString("IDX"));
priceLib.setBegDate(rs.getString("BEGDATE"));
}
}
return priceLib;
} catch (ClassNotFoundException e) {
log.error("数据库连接异常{}", e.getMessage(), e);
throw new PPException(MessageEnum..getCode(), MessageEnum..getMessage());
} catch (SQLException e) {
log.error("sql语句执行失败{}", e.getMessage(), e);
throw new PPException(MessageEnum.sql.getCode(), MessageEnum.sql.getMessage());
} finally {
try {
if (rs != null) {
rs.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/** /**
* *
* *

@ -0,0 +1,88 @@
package com.nmgs.util;
import com.nmgs.enumeration.MessageEnum;
import com.nmgs.exception.PPException;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.MessageDigest;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
/**
* @author: shuguang
* @date: 20250115 14:42
* @description:
*/
@Slf4j
public class ZlibUtil {
public static void compressPriceSQBToZLIBWithMD5(String sqbFilePath, String outputDirectory, String filePrefix, String idx) {
try {
// 生成当前时间字符串
String formattedTime = getFormattedTime();
// 临时生成的 ZLIB 文件路径
String tempZlibFileName = filePrefix + "temp_" + formattedTime + "_" + idx + ".ZLIB";
String tempZlibFilePath = outputDirectory + File.separator + tempZlibFileName;
// 压缩文件
compressFile(sqbFilePath, tempZlibFilePath);
// 生成临时 ZLIB 文件的 MD5 值
String md5 = getFileMD5(tempZlibFilePath);
// 生成最终的文件名
String finalZlibFileName = filePrefix + "_" + formattedTime + "_" + idx + "_" + md5 + ".ZLIB";
String finalZlibFilePath = outputDirectory + File.separator + finalZlibFileName;
// 重命名临时文件
new File(tempZlibFilePath).renameTo(new File(finalZlibFilePath));
log.info("文件压缩完成,文件全路径为: {}", finalZlibFilePath);
} catch (Exception e) {
log.error("文件压缩失败{}", e.getMessage(), e);
throw new PPException(MessageEnum..getCode(), MessageEnum..getMessage());
}
}
public static void compressFile(String sourceFilePath, String destFilePath) throws Exception {
try (InputStream in = new FileInputStream(sourceFilePath);
OutputStream out = new FileOutputStream(destFilePath);
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(out, new Deflater(Deflater.BEST_COMPRESSION))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
deflaterOutputStream.write(buffer, 0, bytesRead);
}
deflaterOutputStream.finish();
}
}
public static String getFileMD5(String filePath) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
try (FileInputStream fis = new FileInputStream(filePath)) {
byte[] buffer = new byte[1024];
int numRead;
while ((numRead = fis.read(buffer)) != -1) {
md.update(buffer, 0, numRead);
}
byte[] md5Bytes = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : md5Bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
public static String getFormattedTime() {
LocalDateTime currentTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
return currentTime.format(formatter);
}
}
Loading…
Cancel
Save