Util
FieldStats
這段代碼定義了一個名為`FieldStats`的Java類,位于`com.cqupt.software_1.Util`包中。它使用了`lombok`庫的`@Data`和`@AllArgsConstructor`注解,這些注解幫助生成了`getter`、`setter`、`toString`等方法,以及包含所有參數的構造函數。類中有三個字段:
- `missingRate`:表示缺失率。
- `mean`:表示平均值。
- `variance`:表示方差。構造函數接受這三個字段作為參數,并將它們賦值給對應的字段。這個類主要用于存儲字段的統計信息,例如在數據分析中計算每個字段的缺失率、平均值和方差等統計數據。
package com.cqupt.software_1.Util;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class FieldStats {private double missingRate;private double mean;private double variance;
}
ImportXlsxToMysql
這段代碼是一個Java程序,它用于將Excel文件(.xlsx格式)中的數據導入到MySQL數據庫中。讓我詳細介紹一下:1. `ImportXlsxToMysql` 類包含了 `main` 方法,是程序的入口點。它主要負責讀取Excel文件中的數據,并將數據插入到MySQL數據庫中。2. 在 `main` 方法中,首先定義了一些變量,如 `xlsxFilePath` 存儲了Excel文件的路徑,`dbUrl` 存儲了數據庫的URL,`username` 和 `password` 分別是數據庫的用戶名和密碼,`tableName` 是要插入數據的表名。3. 在 `try-with-resources` 語句中,打開文件輸入流 `fileInputStream`,并使用 `WorkbookFactory.create(fileInputStream)` 創建一個 Workbook 對象,用于處理 Excel 文件。然后,通過 `DriverManager.getConnection` 方法建立數據庫連接。4. 通過 `workbook.getSheetAt(0)` 獲取Excel文件的第一個工作表,并通過 `sheet.getRow(0)` 獲取表頭行,從中獲取列數。5. 構建 SQL 插入語句。通過遍歷表頭行的每一列,獲取列名,并構建插入語句的列部分。然后通過遍歷列數,構建插入語句的值部分,同時使用占位符 '?'。6. 執行插入操作。通過準備好的 SQL 插入語句創建 `PreparedStatement` 對象,然后遍歷 Excel 文件的每一行,設置參數值,并執行插入操作。7. `getCellValueAsString` 方法用于將單元格的值以字符串的形式返回。它接受一個 `Cell` 對象作為參數,首先檢查單元格的類型,然后將其值轉換為相應類型的字符串,并返回。8. 最后,在 `catch` 塊中捕獲可能出現的異常,例如 `IOException` 和 `SQLException`,并打印異常信息。這個程序的功能是將 Excel 文件中的數據導入到 MySQL 數據庫中的指定表中,它支持包含不同數據類型的單元格值,并能處理空單元格。
package com.cqupt.software_1.Util;import org.apache.poi.ss.usermodel.*;import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class ImportXlsxToMysql {public static void main(String[] args) {String xlsxFilePath = "C:\\Users\\hp\\Desktop\\example.xlsx";String dbUrl = "jdbc:mysql://10.16.48.219:3306/result_save";String username = "root";String password = "111111";String tableName = "";try (FileInputStream fileInputStream = new FileInputStream(xlsxFilePath);Workbook workbook = WorkbookFactory.create(fileInputStream);Connection connection = DriverManager.getConnection(dbUrl, username, password)) {Sheet sheet = workbook.getSheetAt(0);Row headerRow = sheet.getRow(0);int columnCount = headerRow.getLastCellNum();StringBuilder sqlBuilder = new StringBuilder();sqlBuilder.append("INSERT INTO ").append(tableName).append(" (");for (int i = 0; i < columnCount; i++) {String columnName = getCellValueAsString(headerRow.getCell(i));sqlBuilder.append(columnName);if (i < columnCount - 1) {sqlBuilder.append(", ");}}sqlBuilder.append(") VALUES (");for (int i = 0; i < columnCount; i++) {sqlBuilder.append("?");if (i < columnCount - 1) {sqlBuilder.append(", ");}}sqlBuilder.append(")");String insertSql = sqlBuilder.toString();try (PreparedStatement statement = connection.prepareStatement(insertSql)) {for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {Row row = sheet.getRow(rowIndex);for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {Cell cell = row.getCell(columnIndex);String cellValue = getCellValueAsString(cell);statement.setString(columnIndex + 1, cellValue);}statement.executeUpdate();}}System.out.println("Data imported successfully!");} catch (IOException | SQLException e) {e.printStackTrace();}}private static String getCellValueAsString(Cell cell) {if (cell == null) {return "";}CellType cellType = cell.getCellType();String cellValue;if (cellType == CellType.STRING) {cellValue = cell.getStringCellValue();} else if (cellType == CellType.NUMERIC) {cellValue = String.valueOf(cell.getNumericCellValue());} else if (cellType == CellType.BOOLEAN) {cellValue = String.valueOf(cell.getBooleanCellValue());} else if (cellType == CellType.FORMULA) {cellValue = cell.getCellFormula();} else {cellValue = "";}return cellValue;}
}
SecurityUtil
這段代碼定義了一個名為`SecurityUtil`的Java類,它包含了一個靜態方法`hashDataSHA256`,用于對輸入的字符串數據使用SHA-256算法進行哈希加密。`hashDataSHA256`方法接受一個`String`類型的參數`data`,這是需要被加密的原始數據。方法內部首先嘗試獲取SHA-256算法的實例,如果獲取失敗(例如,因為Java環境不支持該算法),則通過`NoSuchAlgorithmException`異常處理。如果算法實例成功獲取,方法將原始數據轉換為字節數組,并使用`MessageDigest`的`digest`方法對其進行加密。`digest`方法返回一個字節數組,該數組包含了SHA-256算法加密后的結果。接下來,方法將加密后的字節數組轉換為十六進制的字符串表示形式。它使用`StringBuilder`類來構建這個十六進制字符串,并通過`String.format`方法將每個字節轉換為兩個字符的十六進制形式。最后,方法返回生成的十六進制字符串,該字符串代表了原始數據的SHA-256哈希值。如果發生異常,方法將打印堆棧跟蹤信息并返回`null`。`SecurityUtil`類可以被其他Java程序調用,以便對數據進行SHA-256加密。這通常用于密碼加密、數據完整性校驗等安全相關的應用場景。
package com.cqupt.software_1.Util;import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class SecurityUtil {public static String hashDataSHA256(String data) {try {MessageDigest md = MessageDigest.getInstance("SHA-256");byte[] hashInBytes = md.digest(data.getBytes(StandardCharsets.UTF_8));StringBuilder sb = new StringBuilder();for (byte b : hashInBytes) {sb.append(String.format("%02x", b));}return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}
}
utils
HTTPUtils
這段代碼定義了一個名為 `HTTPUtils` 的 Java 類,它包含了一個靜態方法 `postRequest`,用于向指定的 HTTP 服務器發送 POST 請求,并返回服務器響應的 JSON 數據。
`postRequest` 方法接受兩個參數,第一個參數是要發送的數據對象 `paramData`,第二個參數是請求路徑 `path`。
方法首先構建了一個 URI 對象,表示請求的完整路徑,這個路徑由 `rootPath` 和傳入的 `path` 拼接而成。
然后,創建了一個 `HttpPost` 對象,用于執行 POST 請求,同時創建了一個 `HttpClient` 對象來執行 HTTP 請求。
接下來,使用 `ObjectMapper` 對象將傳入的 `paramData` 對象轉換為 JSON 格式的字符串 `jsonData`。在轉換過程中,允許非數值字符的存在,這一特性通過 `objectMapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true)` 實現。
接著,將 JSON 數據設置到請求的實體中,同時設置請求體的編碼為 UTF-8。
設置請求頭部為 `application/json; charset=UTF-8`,指明請求體的類型和編碼格式。
執行 HTTP 請求,得到服務器的響應對象 `response`,然后將響應實體中的數據轉換為字符串 `responseData`。
最后,使用 `ObjectMapper` 將響應數據字符串轉換為 JSON 對象 `JsonNode`,并返回該對象。
這個 `HTTPUtils` 類提供了一個方便的工具方法,可以用于在 Java 程序中向指定的 HTTP 服務器發送 POST 請求,并獲取服務器返回的 JSON 數據。
package com.cqupt.software_1.utils;import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;public class HTTPUtils {public static final String rootPath = "http://localhost:5000/";public static JsonNode postRequest(Object paramData, String path) throws URISyntaxException, IOException {URI uri = new URI(rootPath+path);HttpPost httpPost = new HttpPost(uri);HttpClient httpClient = HttpClients.createDefault();ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true);String jsonData = objectMapper.writeValueAsString(paramData);
StringEntity entity = new StringEntity(jsonData, StandardCharsets.UTF_8);httpPost.setEntity(entity);httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8"); HttpResponse response = httpClient.execute(httpPost);String responseData = EntityUtils.toString(response.getEntity());JsonNode jsonNode = objectMapper.readValue(responseData, JsonNode.class);return jsonNode;}
}