분류Java 아래의 글

import java.time.LocalDateTime;

public class SampleEntity {

private Long id;
private LocalDateTime startDt;

// Getter & Setter
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public LocalDateTime getStartDt() {
    return startDt;
}

public void setStartDt(LocalDateTime startDt) {
    this.startDt = startDt;
}

}

mariadb에서 from_dt는 DATE 형입니다. React 화면에서 '2025-06-02T01:59:30.885Z' 전달되어 실행 결과 Incorrect data value 오류가 발생하였습니다. 해결 방법 알려주세요

import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeParseException;
import java.time.format.DateTimeFormatter;

public class DateParser {

private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

/**
 * ISO 8601 문자열을 "yyyy-MM-dd" 형식 문자열로 변환
 * - 유효하지 않은 경우 null 반환
 */
public static String parseToDateString(String isoString) {
    if (isoString == null || isoString.trim().isEmpty()) {
        return null;
    }

    try {
        Instant instant = Instant.parse(isoString);
        LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
        return localDate.format(DATE_FORMATTER);
    } catch (DateTimeParseException e) {
        return null;
    }
}

}

public class ResultColumnChecker {

/**
 * 조회 결과에서 resultFlag와 resultMessage 컬럼이 SELECT 절에 포함되어 있는지 확인합니다.
 *
 * @param resultList iBatis 조회 결과 (List<LinkedHashMap<String, Object>>)
 * @return true: 두 컬럼 모두 존재, false: 둘 중 하나라도 없음
 */
public static boolean checkColumnsInSelect(List<LinkedHashMap<String, Object>> resultList) {
    if (resultList == null || resultList.isEmpty()) {
        return false;
    }

    // 첫 번째 row 기준으로 컬럼 존재 여부 판단
    LinkedHashMap<String, Object> firstRow = resultList.get(0);
    Set<String> columnNames = firstRow.keySet();

    return columnNames.contains("resultFlag") && columnNames.contains("resultMessage");
}

// 사용 예시
public static void main(String[] args) {
    List<LinkedHashMap<String, Object>> resultList = new ArrayList<>();

    LinkedHashMap<String, Object> row = new LinkedHashMap<>();
    row.put("id", 1);
    row.put("resultFlag", null);       // 값은 null이어도 컬럼이 존재하므로 OK
    row.put("resultMessage", "");      // 빈 문자열도 OK

    resultList.add(row);

    boolean hasColumns = checkColumnsInSelect(resultList);
    System.out.println("SELECT 절에 컬럼 존재 여부: " + hasColumns);  // true 출력
}

}

import java.sql.*;

public class SqlResultValidator {

public static void main(String[] args) {
    String sql = "SELECT resultCode, resultMessage FROM your_table"; // 테스트용 SQL
    try (Connection conn = DriverManager.getConnection(
            "jdbc:mariadb://127.0.0.1:3306/your_database", "root", "9909");
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql)) {

        if (validateColumns(rs, "resultCode", "resultMessage")) {
            System.out.println("✅ SQL 실행 결과에 resultCode와 resultMessage 컬럼이 포함되어 있습니다.");
        } else {
            System.err.println("❌ SQL 실행 결과에 필수 컬럼(resultCode, resultMessage)이 포함되어 있지 않습니다.");
        }

    } catch (SQLException e) {
        System.err.println("SQL 실행 중 오류 발생: " + e.getMessage());
    }
}

private static boolean validateColumns(ResultSet rs, String... requiredColumns) throws SQLException {
    ResultSetMetaData metaData = rs.getMetaData();
    int columnCount = metaData.getColumnCount();
    for (String requiredColumn : requiredColumns) {
        boolean found = false;
        for (int i = 1; i <= columnCount; i++) {
            if (requiredColumn.equalsIgnoreCase(metaData.getColumnLabel(i))) {
                found = true;
                break;
            }
        }
        if (!found) return false;
    }
    return true;
}

}