Kenmegne
2025-12-10 e9d80d486b912144b59ebd5939d4837105b37b99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.queryadhoc.queries;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 *
 * @author ASUS
 */
public class CommonSelectQuery {
 
    private final String tableName;
    private final Connection connection;
    private final List<String> selectColumns;
    private final int limit;
    private final int offset;
 
    public CommonSelectQuery(Connection connection, String tableName, List<String> selectColumns, int limit, int offset) {
        this.tableName = tableName;
        this.connection = connection;
        this.selectColumns = selectColumns;
        this.limit = limit;
        this.offset = offset;
    }
 
    public CommonSelectQuery(Connection connection, String tableName, List<String> selectColumns) {
        this(connection, tableName, selectColumns, -1, -1);
    }
 
    public CommonSelectQuery(String tableName, Connection connection, List<String> selectColumns, int limit, int offset, boolean withCustomColumns) {
        this.tableName = tableName;
        this.connection = connection;
        this.selectColumns = selectColumns;
        this.limit = limit;
        this.offset = offset;
    }
 
    public List<Map<String, Object>> execute() throws SQLException {
        List<Map<String, Object>> allData = new ArrayList<>();
 
        try ( PreparedStatement statement = connection.prepareStatement(selectQuery())) {
            ResultSet resultSet = statement.executeQuery();
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();
 
            while (resultSet.next()) {
                Map<String, Object> dataMap = new HashMap<>();
 
                for (int i = 1; i <= columnCount; i++) {
                    String name = metaData.getColumnName(i).trim();
                    Object value = resultSet.getObject(i);
                    dataMap.put(name, cleanData(value));
                }
 
                allData.add(dataMap);
            }
        }
        return allData;
    }
 
    public String selectQuery() {
 
        StringBuilder query = new StringBuilder("SELECT ");
 
        if (selectColumns.isEmpty()) {
 
            query.append(" * ");
 
        } else {
 
            selectColumns.forEach(c -> query.append(c.toLowerCase()).append(","));
            query.replace(query.length() - 1, query.length(), ""); //retirer la sernière virgule
 
        }
 
        query
                .append(" FROM ")
                .append(tableName);
 
        if (limit > 0 && offset >= 0) {
 
            query
                    .append(" LIMIT ")
                    .append(limit)
                    .append(" OFFSET ")
                    .append(offset);
        }
 
        return query.toString();
    }
 
    private Object cleanData(Object data) {
        if (data == null) {
            return null;
        }
 
        if (data instanceof String) {
            String dataString = ((String) data).trim();
            return dataString.replaceAll("(?U)\\s+", " ");
        } else {
            return data;
        }
    }
}