/* * 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 selectColumns; private final int limit; private final int offset; public CommonSelectQuery(Connection connection, String tableName, List 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 selectColumns) { this(connection, tableName, selectColumns, -1, -1); } public CommonSelectQuery(String tableName, Connection connection, List selectColumns, int limit, int offset, boolean withCustomColumns) { this.tableName = tableName; this.connection = connection; this.selectColumns = selectColumns; this.limit = limit; this.offset = offset; } public List> execute() throws SQLException { List> 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 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; } } }