/*
|
* 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;
|
}
|
}
|
}
|