Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
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
package com.megatim.fdxcommons.tools.database.tables;
 
import com.megatim.fdxcommons.tools.exceptions.FdxColumnNotFoundException;
import com.megatim.fdxcommons.tools.database.contrat.TableName;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.naming.NamingException;
 
/**
 *
 * @author Gabuntu
 */
public class FdxTableColumns {
 
    private final TableName tableName;
    private final Connection connection;
    private final List<FdxTableColumn> fdxTableColumns = new ArrayList<>();
 
    public FdxTableColumns(TableName tableName, Connection connection) {
        this.tableName = tableName;
        this.connection = connection;
    }
 
    public List<FdxTableColumn> columns() throws SQLException, NamingException {
        if (fdxTableColumns.isEmpty()) {
            DatabaseMetaData metaData = connection.getMetaData();
            ResultSet columns = metaData.getColumns(null, null, tableName.name(connection), null);
            while (columns.next()) {
                String name = columns.getString("COLUMN_NAME");
                int type = columns.getInt("DATA_TYPE");
                int position = columns.getInt("ORDINAL_POSITION");
                int size = columns.getInt("COLUMN_SIZE");
                fdxTableColumns.add(new FdxTableColumn(name, type, position, size));
            }
 
            Collections.sort(fdxTableColumns, (c1, c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition()));
        }
        return fdxTableColumns;
    }
 
    public FdxTableColumn column(String name) throws FdxColumnNotFoundException, SQLException, NamingException {
        return columns()
                .stream()
                .filter(c -> c.getName().equals(name))
                .findFirst()
                .orElseThrow(() -> new FdxColumnNotFoundException("Colonne introuvable dans la table"));
    }
 
}