카테고리 없음

Multi-row Insert Builder

tester______ 2025. 11. 20. 10:06

public String buildMultiRowInsertSql(
        String tableName,
        List<String> columns,
        List<List<Object>> rows
) {
    String columnPart = columns.stream()
            .map(col -> "[" + col + "]")
            .collect(Collectors.joining(", "));

    StringBuilder sb = new StringBuilder();
    sb.append("INSERT INTO ").append(tableName).append(" (")
            .append(columnPart)
            .append(")\nVALUES\n");

    for (int i = 0; i < rows.size(); i++) {
        List<Object> row = rows.get(i);

        String valuePart = row.stream()
                .map(this::toSqlValue)
                .collect(Collectors.joining(", "));

        sb.append("(").append(valuePart).append(")");

        if (i < rows.size() - 1) sb.append(",\n");
    }

    return sb.toString();
}

private String toSqlValue(Object v) {
    if (v == null) return "NULL";
    if (v instanceof Number) return v.toString();
    if (v instanceof java.util.Date)
        return "'" + new java.sql.Timestamp(((Date) v).getTime()) + "'";
    
    // escape single quotes
    return "'" + v.toString().replace("'", "''") + "'";
}