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