반응형
JSON 파라미터는 반드시 배열 형식으로 입력되어야 하며, 각 객체는 키-값 쌍으로 구성
JSON 파라미터 파싱: check_param의 JSON 데이터를 ArrayList<Map<String, Object>> 형태로 변환합니다
import java.sql.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;
import java.io.StringReader;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.InputSource;
public class SqlChecker {
private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static void main(String[] args) {
String sqlTemplate = "SELECT CASE WHEN COUNT(*) > 0 THEN 'S' ELSE 'F' END AS resultFlag "
+ "FROM activity WHERE COMPANY = ? AND ST_DT >= ? AND EN_DT <= ?";
String xmlData = "<itf>"
+ "<param>"
+ "<company>samsung</company>"
+ "<stDate>20250102</stDate>"
+ "<edDate>20250307</edDate>"
+ "</param>"
+ "<param>"
+ "<company>lg</company>"
+ "<stDate>20250301</stDate>"
+ "<edDate>20250307</edDate>"
+ "</param>"
+ "<param>"
+ "<company>lg</company>"
+ "<stDate>20250301</stDate>"
+ "<edDate>20250307</edDate>"
+ "</param>"
+ "</itf>";
try (Connection connection = DriverManager.getConnection(DB_URL, USER, PASSWORD)) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlData)));
NodeList paramList = doc.getElementsByTagName("param");
for (int i = 0; i < paramList.getLength(); i++) {
Element param = (Element) paramList.item(i);
String company = param.getElementsByTagName("company").item(0).getTextContent();
String stDate = param.getElementsByTagName("stDate").item(0).getTextContent();
String edDate = param.getElementsByTagName("edDate").item(0).getTextContent();
String resultFlag = executeSql(connection, sqlTemplate, company, stDate, edDate);
updateCheckResult(connection, company, stDate, edDate, resultFlag);
}
} catch (SQLException | ParserConfigurationException | Exception e) {
e.printStackTrace();
}
}
private static String executeSql(Connection connection, String sqlTemplate, String company, String stDate, String edDate) {
try (PreparedStatement stmt = connection.prepareStatement(sqlTemplate)) {
stmt.setString(1, company);
stmt.setString(2, stDate);
stmt.setString(3, edDate);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return rs.getString("resultFlag");
}
} catch (SQLException e) {
e.printStackTrace();
}
return "오류"; // 기본 오류 반환
}
private static void updateCheckResult(Connection connection, String company, String stDate, String edDate, String resultFlag) {
String updateSql = "UPDATE activity SET check_result = ? WHERE COMPANY = ? AND ST_DT = ? AND EN_DT = ?";
try (PreparedStatement updateStmt = connection.prepareStatement(updateSql)) {
updateStmt.setString(1, resultFlag);
updateStmt.setString(2, company);
updateStmt.setString(3, stDate);
updateStmt.setString(4, edDate);
updateStmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
import java.sql.*;
import java.util.*;
import org.json.JSONArray;
import org.json.JSONObject;
public class SqlChecker {
private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(DB_URL, USER, PASSWORD)) {
String selectSql = "SELECT id, check_sql, check_param FROM activity";
try (PreparedStatement selectStmt = connection.prepareStatement(selectSql);
ResultSet resultSet = selectStmt.executeQuery()) {
while (resultSet.next()) {
int id = resultSet.getInt("id");
String checkSql = resultSet.getString("check_sql");
String checkParam = resultSet.getString("check_param");
List<Map<String, Object>> params = parseJsonParams(checkParam);
String checkResult = executeSqlWithParams(connection, checkSql, params);
updateCheckResult(connection, id, checkResult);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static List<Map<String, Object>> parseJsonParams(String checkParam) {
List<Map<String, Object>> paramList = new ArrayList<>();
JSONArray jsonArray = new JSONArray(checkParam);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Map<String, Object> paramMap = new HashMap<>();
for (String key : jsonObject.keySet()) {
paramMap.put(key, jsonObject.get(key));
}
paramList.add(paramMap);
}
return paramList;
}
private static String executeSqlWithParams(Connection connection, String checkSql, List<Map<String, Object>> params) {
StringBuilder results = new StringBuilder();
for (Map<String, Object> paramMap : params) {
try (PreparedStatement stmt = connection.prepareStatement(checkSql)) {
int index = 1;
for (String key : paramMap.keySet()) {
stmt.setObject(index++, paramMap.get(key));
}
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
results.append("성공: ").append(rs.getString(1)).append("; ");
} else {
results.append("실패; ");
}
} catch (SQLException e) {
results.append("오류: ").append(e.getMessage()).append("; ");
}
}
return results.toString();
}
private static void updateCheckResult(Connection connection, int id, String checkResult) {
String updateSql = "UPDATE activity SET check_result = ? WHERE id = ?";
try (PreparedStatement updateStmt = connection.prepareStatement(updateSql)) {
updateStmt.setString(1, checkResult);
updateStmt.setInt(2, id);
updateStmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
반응형
'기술자료' 카테고리의 다른 글
4레벨로 AGGrid에서 그리드 트리 형태 표시 (0) | 2025.03.31 |
---|---|
React Ag-Grid의 e.api.sizeColumnsToFit() 함수 (0) | 2025.03.26 |
MariaDB에서 숫자를 천 단위로 포맷하여 반환하려면 FORMAT() 함수 (0) | 2025.03.26 |
Java, Spring, iBatis, MariaDB 환경에서 테스트 액티비티 테이블에 SQL 문장을 입력하고 해당 테스트 액티비티를 실행하여 결과를 저장하는 프로그램 (0) | 2025.03.26 |
테스트 관리 도구 만들기 (0) | 2025.03.26 |