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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * 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.table;
 
import com.megatim.queryadhoc.connection.abtracts.DataBaseConnection;
import com.megatim.queryadhoc.connection.impl.MySqlDbConnection;
import com.megatim.queryadhoc.connection.impl.OracleDbConnection;
import com.megatim.queryadhoc.connection.impl.PostgresDbConnection;
import com.megatim.queryadhoc.connection.impl.SqlServerDbConnection;
import com.megatim.queryadhoc.enums.SgbdType;
import com.megatim.queryadhoc.exceptions.ConnectionException;
import com.megatim.queryadhoc.exceptions.ConnectionParameterException;
import com.megatim.queryadhoc.exceptions.NotSupportedDataBaseException;
import com.megatim.queryadhoc.model.ConnectionParameter;
import com.megatim.queryadhoc.query.ifaces.InsertQuery;
import com.megatim.queryadhoc.query.ifaces.SelectQuery;
import com.megatim.queryadhoc.query.insert.impl.MySqlInsertQuery;
import com.megatim.queryadhoc.query.insert.impl.OracleInsertQuery;
import com.megatim.queryadhoc.query.insert.impl.PostgresInsertQuery;
import com.megatim.queryadhoc.query.insert.impl.SqlServerInsertQuery;
import com.megatim.queryadhoc.query.select.impl.MySqlSelectQuery;
import com.megatim.queryadhoc.query.select.impl.OracleSelectQuery;
import com.megatim.queryadhoc.query.select.impl.PostgresSelectQuery;
import com.megatim.queryadhoc.query.select.impl.SqlServerSelectQuery;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
 
/**
 *
 * @author ASUS
 */
public class DataBaseTable {
 
    private final SgbdType sgbdType;
    private final ConnectionParameter connectionParameter;
 
    public DataBaseTable(SgbdType sgbdType, ConnectionParameter connectionParameter) {
        this.sgbdType = sgbdType;
        this.connectionParameter = connectionParameter;
    }
 
    public SelectQuery select() throws NotSupportedDataBaseException {
        if (sgbdType == null) {
            throw new NotSupportedDataBaseException(null);
        }
        switch (sgbdType) {
            case ORACLE:
                return new OracleSelectQuery(connectionParameter);
            case POSTGRESQL:
                return new PostgresSelectQuery(connectionParameter);
            case MYSQL:
                return new MySqlSelectQuery(connectionParameter);
            case SQLSERVER:
                return new SqlServerSelectQuery(connectionParameter);
            default:
                throw new NotSupportedDataBaseException(sgbdType.name());
        }
    }
 
    public InsertQuery insert() throws NotSupportedDataBaseException {
        if (sgbdType == null) {
            throw new NotSupportedDataBaseException(null);
        }
        switch (sgbdType) {
            case ORACLE:
                return new OracleInsertQuery(connectionParameter);
            case POSTGRESQL:
                return new PostgresInsertQuery(connectionParameter);
            case MYSQL:
                return new MySqlInsertQuery(connectionParameter);
            case SQLSERVER:
                return new SqlServerInsertQuery(connectionParameter);
            default:
                throw new NotSupportedDataBaseException(sgbdType.name());
        }
    }
 
    public boolean isDatabaseAvailable() throws NotSupportedDataBaseException, ConnectionParameterException {
        if (sgbdType == null) {
            throw new NotSupportedDataBaseException(null);
        }
        try {
            switch (sgbdType) {
                case ORACLE:
                    return isDatabaseAvailable(new OracleDbConnection(connectionParameter));
                case POSTGRESQL:
                    return isDatabaseAvailable(new PostgresDbConnection(connectionParameter));
                case MYSQL:
                    return isDatabaseAvailable(new MySqlDbConnection(connectionParameter));
                case SQLSERVER:
                    return isDatabaseAvailable(new SqlServerDbConnection(connectionParameter));
                default:
                    throw new NotSupportedDataBaseException(sgbdType.name());
            }
        } catch (ConnectionException ex) {
            return false;
        }
    }
 
    public boolean tableExists(String tableName) throws NotSupportedDataBaseException, ConnectionParameterException, ConnectionException {
        if (sgbdType == null) {
            throw new NotSupportedDataBaseException(null);
        }
        try {
            switch (sgbdType) {
                case ORACLE:
                    return tableExists(new OracleDbConnection(connectionParameter), tableName);
                case POSTGRESQL:
                    return tableExists(new PostgresDbConnection(connectionParameter), tableName);
                case MYSQL:
                    return tableExists(new MySqlDbConnection(connectionParameter), tableName);
                case SQLSERVER:
                    return tableExists(new SqlServerDbConnection(connectionParameter), tableName);
                default:
                    throw new NotSupportedDataBaseException(sgbdType.name());
            }
        } catch (SQLException ex) {
            return false;
        }
    }
 
    private boolean isDatabaseAvailable(DataBaseConnection dbConnection) throws ConnectionException, ConnectionParameterException, NotSupportedDataBaseException {
 
        if (dbConnection != null) {
            dbConnection.getConnection();
            dbConnection.closeConnection();
            return true;
        } else {
            return false;
        }
    }
 
    private boolean tableExists(DataBaseConnection dbConnection, String tableName) throws ConnectionParameterException, NotSupportedDataBaseException, ConnectionException, SQLException {
        String query = "SELECT * FROM " + tableName;
 
        try ( Connection connection = dbConnection.getConnection();  PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.executeQuery();
            dbConnection.closeConnection();
            return true;
        }
    }
}