/*
* Classe dedicata alla gestione del Database.
* Gestisce l'apertura e la chiusura della connessione col Database
* Fornisce i metodi per l'esecuzione delle query sul Database
*/
import com.mysql.jdbc.ServerPreparedStatement;
import java.sql.*;
import java.util.Vector;
public class MySQLConnection {
private MyLog mylog;
private String nomeDB; // Nome del Database a cui connettersi
private String nomeUtente; // Nome utente utilizzato per la connessione al Database
private String pwdUtente; // Password usata per la connessione al Database
private String errore; // Raccoglie informazioni riguardo l'ultima eccezione sollevata
private Connection db; // La connessione col Database
private boolean connesso; // Flag che indica se la connessione è attiva o meno
public MySQLConnection(MyLog mylog, String nomeDB) { this(mylog, nomeDB, "", ""); }
public MySQLConnection(MyLog mylog, String nomeDB, String nomeUtente, String pwdUtente) {
this.mylog = mylog;
this.nomeDB = nomeDB;
this.nomeUtente = nomeUtente;
this.pwdUtente = pwdUtente;
connesso = false;
errore = "";
}
// Apre la connessione con il Database
public boolean connect() {
connesso = false;
try {
// Carico il driver JDBC per la connessione con il database MySQL
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Controllo che il nome del Database non sia nullo
if (!nomeDB.equals("")) {
// Controllo se il nome utente va usato o meno per la connessione
if (nomeUtente.equals("")) {
// La connessione non richiede nome utente e password
db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
} else {
// La connessione richiede nome utente, controllo se necessita anche della password
if (pwdUtente.equals("")) {
// La connessione non necessita di password
db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente);
} else {
// La connessione necessita della password
db = DriverManager.getConnection("jdbc:mysql://localhost:3308/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
}
}
// La connessione è avvenuta con successo
connesso = true;
//Controlla che la connessione al db sia avvenuta con successo
if (db.isClosed()) connesso = false;
} else {
System.out.println("Manca il nome del database!!");
System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"");
System.exit(0);
}
} catch (Exception e) {
errore = e.getMessage();
e.printStackTrace();
connesso = false;
}
return connesso;
}
// Esegue una query di selezione dati sul Database
// query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
// colonne: il numero di colonne di cui sarà composta la tupla del risultato
// ritorna un Vector contenente tutte le tuple del risultato
public Vector eseguiQuery(String query) {
Vector v = null;
String [] record;
int colonne = 0;
try {
Statement stmt = db.createStatement(); // Creo lo Statement per l'esecuzione della query
ResultSet rs = stmt.executeQuery(query); // Ottengo il ResultSet dell'esecuzione della query
v = new Vector();
ResultSetMetaData rsmd = rs.getMetaData();
colonne = rsmd.getColumnCount();
while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet
record = new String[colonne];
for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
v.add( (String[]) record.clone() );
}
rs.close(); // Chiudo il ResultSet
stmt.close(); // Chiudo lo Statement
} catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
return v;
}
// Esegue una query di aggiornamento sul Database
// query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
// ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
public boolean eseguiAggiornamento(String query) {
int numero = 0;
boolean risultato = false;
try {
Statement stmt = db.createStatement();
numero = stmt.executeUpdate(query);
risultato = true;
stmt.close();
} catch (Exception e) {
e.printStackTrace();
errore = e.getMessage();
risultato = false;
}
return risultato;
}
// Chiude la connessione con il Database
public void disconnect() {
try {
db.close();
connesso = false;
} catch (Exception e) { e.printStackTrace(); }
}
public void deleteTable(){
this.eseguiAggiornamento("DELETE FROM gestionale_import");
}
/**
* Controlla la presenza della pratica nel determinato stato.
* Se L'importazione sy MySQL è avvenuta con successo (campo GEST_IMPORTED = Y) non fare nulla, altrimenti cancella il record
* @param pratica
* @return
*/
public boolean ctrlPresenza(Pratica pratica){
ResultSet rs;
boolean ctrl = true;
try {
Statement statement = db.createStatement();
String query1 = "SELECT * FROM gestionale_import WHERE GESTIONALE_EXTERNAL_ID = '" + pratica.gestionale_external_id + "' AND REPARATION_STATE_ID = " + pratica.getReparation_state_id();
//System.out.println(statement);
rs = statement.executeQuery(query1);
if(rs.next()){
String gest_imported = rs.getString("GEST_IMPORTED");
if (!gest_imported.equalsIgnoreCase("Y")){
this.mylog.error("Verrà rispristinato il record relativo alla pratica " + pratica.gestionale_external_id, false);
String query2 = "DELETE FROM gestionale_import WHERE GESTIONALE_EXTERNAL_ID = '" + pratica.gestionale_external_id + "' AND REPARATION_STATE_ID = " + pratica.getReparation_state_id();
statement.execute(query2);
ctrl = true;}
else
ctrl = true;
}
rs.close();
statement.close();
} catch (SQLException e) {e.printStackTrace();}
return ctrl;
}
public void insertHeadingTicket(Pratica pratica){
if(this.ctrlPresenza(pratica)){
pratica.controlloPratica(this);
String query = "" +
"INSERT INTO gestionale_import(" +
"GESTIONALE_EXTERNAL_ID, " +
"REP_DDT, " +
"INPUT_CNSP_DATETIME, " +
"WARRANTY_FLAG, " +
"WARRANTY_START_DATE, " +
"REPARATION_WARRANTY_FLAG, " +
"ESTHETICS_DEVICE_ID, " +
"SYMPTOM_DECLARED_DESCRIPTION, " +
"REPARATION_STATE_ID, " +
"IMEI, " +
"COMMERCIAL_CODE, " +
"PHONE_TYPE, " +
"CODE, " +
"SOFTWARE_VERSION, " +
"SURNAME_RAGIONE_SOCIALE, " +
"TELEPHONE, " +
"PERSON_DESCRIPTION, " +
"CUSTOMER_TYPE, " +
"CHANGE_NOTE" +
") VALUES(" +
"'" + pratica.gestionale_external_id + "', " +
"0, " +
"'" + pratica.input_cnsp_datetime + "', " +
"'" + pratica.warranty_flag + "', " +
"" + pratica.getWarrenty_start_date() + ", " +
"'" + pratica.reparation_warranty_flag + "', " +
"'" + pratica.esthetics_device_id + "', " +
"'" + pratica.symptom_declared_description + "', " +
"'" + pratica.getReparation_state_id() + "', " +
"'" + pratica.IMEI + "', " +
"'" + pratica.commercial_code + "', " +
"'" + pratica.phone_type + "', " +
"'" + pratica.code + "', " +
"'" + pratica.software_version + "', " +
"'" + pratica.surname_ragione_sociale + "', " +
"'" + pratica.getTelephone() + "', " +
"'" + pratica.person_description + "', " +
"'" + pratica.customer_type + "', " +
"'' " +
")" ;
//this.mylog.debug(query,true);
this.eseguiAggiornamento(query);
}
}
public void insertRepairTicket(Pratica pratica){
if(this.ctrlPresenza(pratica)){
pratica.controlloPratica(this);
String query = "" +
"INSERT INTO gestionale_import(" +
"GESTIONALE_EXTERNAL_ID, " +
"REP_DDT, " +
"INPUT_CNSP_DATETIME, " +
"WARRANTY_FLAG, " +
"WARRANTY_START_DATE, " +
"REPARATION_WARRANTY_FLAG, " +
"ESTHETICS_DEVICE_ID, " +
"SYMPTOM_DECLARED_DESCRIPTION, " +
"REPARATION_STATE_ID, " +
"ACTION_CODE, " +
"SYMPTOM_CODE_1, " +
"FAULT_CODE_1, " +
"IMEI, " +
"REP_NEW_IMEI, " +
"COMMERCIAL_CODE, " +
"PHONE_TYPE, " +
"CODE, " +
"SOFTWARE_VERSION, " +
"SURNAME_RAGIONE_SOCIALE, " +
"TELEPHONE, " +
"PERSON_DESCRIPTION, " +
"CUSTOMER_TYPE, " +
"CHANGE_NOTE" +
") VALUES(" +
"'" + pratica.gestionale_external_id + "', " +
"0, " +
"'" + pratica.input_cnsp_datetime + "', " +
"'" + pratica.warranty_flag + "', " +
"" + pratica.getWarrenty_start_date() + ", " +
"'" + pratica.reparation_warranty_flag + "', " +
"'" + pratica.esthetics_device_id + "', " +
"'" + pratica.symptom_declared_description + "', " +
"'" + pratica.getReparation_state_id() + "', " +
"'" + pratica.action_code + "', " +
"'" + pratica.symptom_code_1 + "', " +
"'" + pratica.fault_code_1 + "', " +
"'" + pratica.IMEI + "', " +
"'" + pratica.rep_new_imei + "', " +
"'" + pratica.commercial_code + "', " +
"'" + pratica.phone_type + "', " +
"'" + pratica.code + "', " +
"'" + pratica.software_version + "', " +
"'" + pratica.surname_ragione_sociale + "', " +
"'" + pratica.getTelephone() + "', " +
"'" + pratica.person_description + "', " +
"'" + pratica.customer_type + "', " +
"'' " +
")" ;
//this.mylog.debug(query);
this.eseguiAggiornamento(query);
}
}
public void insertClosedTicket(Pratica pratica){
if(this.ctrlPresenza(pratica)){
String reason_id1 = "";
String reason_id2 = "";
pratica.controlloPratica(this);
if (!pratica.reason_id.equalsIgnoreCase("") && !pratica.reason_id.equalsIgnoreCase("0")){
reason_id1 = "REASON_ID, ";
reason_id2 = "'" + pratica.reason_id + "', ";
}
String query = "" +
"INSERT INTO gestionale_import(" +
"REP_DDT, " +
"REP_DDT_DATE, " +
"GESTIONALE_EXTERNAL_ID, " +
"INPUT_CNSP_DATETIME, " +
"END_DATE, " +
"WARRANTY_FLAG, " +
"WARRANTY_START_DATE, " +
"REPARATION_WARRANTY_FLAG, " +
"ESTHETICS_DEVICE_ID, " +
"SYMPTOM_DECLARED_DESCRIPTION, " +
"REPARATION_STATE_ID, " +
"ACTION_CODE, " +
reason_id1 +
"SYMPTOM_CODE_1, " +
"FAULT_CODE_1, " +
"IMEI, " +
"REP_NEW_IMEI, " +
"REP_NEW_MODEL, " +
"COMMERCIAL_CODE, " +
"PHONE_TYPE, " +
"CODE, " +
"SOFTWARE_VERSION, " +
"SURNAME_RAGIONE_SOCIALE, " +
"TELEPHONE, " +
"PERSON_DESCRIPTION, " +
"CUSTOMER_TYPE, " +
"CHANGE_NOTE" +
") VALUES(" +
"'" + pratica.rep_ddt + "', " +
"'" + pratica.getRep_ddt_date() + "', " +
"'" + pratica.gestionale_external_id + "', " +
"'" + pratica.input_cnsp_datetime + "', " +
"'" + pratica.getEnd_date() + "', " +
"'" + pratica.warranty_flag + "', " +
"" + pratica.getWarrenty_start_date() + ", " +
"'" + pratica.reparation_warranty_flag + "', " +
"'" + pratica.esthetics_device_id + "', " +
"'" + pratica.symptom_declared_description + "', " +
"'" + pratica.getReparation_state_id() + "', " +
"'" + pratica.action_code + "', " +
reason_id2 +
"'" + pratica.symptom_code_1 + "', " +
"'" + pratica.fault_code_1 + "', " +
"'" + pratica.IMEI + "', " +
"'" + pratica.rep_new_imei + "', " +
"'" + pratica.rep_new_model + "', " +
"'" + pratica.commercial_code + "', " +
"'" + pratica.phone_type + "', " +
"'" + pratica.code + "', " +
"'" + pratica.software_version + "', " +
"'" + pratica.surname_ragione_sociale + "', " +
"'" + pratica.getTelephone() + "', " +
"'" + pratica.person_description + "', " +
"'" + pratica.customer_type + "', " +
"'' " +
")" ;
//this.mylog.debug(query);
this.eseguiAggiornamento(query);
}
}
public void insertReturnTicket(Pratica pratica){
if(this.ctrlPresenza(pratica)){
pratica.controlloPratica(this);
String query = "" +
"INSERT INTO gestionale_import(" +
"REP_DDT, " +
"REP_DDT_DATE, " +
"RETURN_DATE, " +
"GESTIONALE_EXTERNAL_ID, " +
"INPUT_CNSP_DATETIME, " +
"WARRANTY_FLAG, " +
"WARRANTY_START_DATE, " +
"REPARATION_WARRANTY_FLAG, " +
"ESTHETICS_DEVICE_ID, " +
"SYMPTOM_DECLARED_DESCRIPTION, " +
"REPARATION_STATE_ID, " +
"IMEI, " +
"COMMERCIAL_CODE, " +
"PHONE_TYPE, " +
"CODE, " +
"SOFTWARE_VERSION, " +
"SURNAME_RAGIONE_SOCIALE, " +
"TELEPHONE, " +
"PERSON_DESCRIPTION, " +
"CUSTOMER_TYPE, " +
"CHANGE_NOTE" +
") VALUES(" +
"'" + pratica.rep_ddt + "', " +
"'" + pratica.getRep_ddt_date() + "', " +
"'" + pratica.getReturn_date() + "', " +
"'" + pratica.gestionale_external_id + "', " +
"'" + pratica.input_cnsp_datetime + "', " +
"'" + pratica.warranty_flag + "', " +
"" + pratica.getWarrenty_start_date() + ", " +
"'" + pratica.reparation_warranty_flag + "', " +
"'" + pratica.esthetics_device_id + "', " +
"'" + pratica.symptom_declared_description + "', " +
"'" + pratica.getReparation_state_id() + "', " +
"'" + pratica.IMEI + "', " +
"'" + pratica.commercial_code + "', " +
"'" + pratica.phone_type + "', " +
"'" + pratica.code + "', " +
"'" + pratica.software_version + "', " +
"'" + pratica.surname_ragione_sociale + "', " +
"'" + pratica.getTelephone() + "', " +
"'" + pratica.person_description + "', " +
"'" + pratica.customer_type + "', " +
"'' " +
")" ;
//this.mylog.debug(query);
this.eseguiAggiornamento(query);
}
}
/**
* Controlla la presenza del modello nel NokiaFET
* Se non presente resituisce "Altro"
* @param pratica
* @return
*/
public boolean getPhoneType(Pratica pratica){
boolean ctrl = true;
ResultSet rs;
try {
Statement statement = db.createStatement();
rs = statement.executeQuery("SELECT PHONE_TYPE FROM model WHERE COMMERCIAL_CODE = '" + pratica.commercial_code +"'");
if (!rs.next())
{
pratica.phone_type = "NA";
pratica.commercial_code = "Altro";
ctrl = false;}
else{
do
pratica.phone_type = rs.getString("PHONE_TYPE");
while(rs.next());
ctrl = true;
}
rs.close();
statement.close();
} catch (SQLException e) {e.printStackTrace();}
return ctrl;
}
public void updateRepairData(Pratica pratica){
String query;
int ctrl;
query = "" +
"UPDATE gestionale_import " +
"SET " +
"REPARATION_STATE_ID = " + pratica.getReparation_state_id() + ", " +
"SYMPTOM_CODE_1 = '" + pratica.symptom_code_1 + "', " +
"ACTION_CODE = '" + pratica.action_code + "', " +
"FAULT_CODE_1 = '" + pratica.fault_code_1 + "', " +
"END_DATE = '" + pratica.getEnd_date() + "' " +
"WHERE GESTIONALE_EXTERNAL_ID = '" + pratica.gestionale_external_id + "'";
if(pratica.getReparation_state_id()>=20)
query = query + " AND REP_DDT <> '0'";
else if(pratica.getReparation_state_id()==19)
query = query + " AND REPARATION_STATE_ID = 19";
else
query = query + " AND REP_DDT = '0'";
//System.out.println(query);
try {
Statement statement = db.createStatement();
ctrl = statement.executeUpdate(query);
//System.out.println(ctrl);
statement.close();
} catch (SQLException e) {e.printStackTrace();}
}
public void cleareGestionaleID(){
String query;
int ctrl;
query = "UPDATE gestionale_import SET GESTIONALE_EXTERNAL_ID = ''";
//System.out.println(query);
try {
Statement statement = db.createStatement();
ctrl = statement.executeUpdate(query);
//System.out.println(ctrl);
statement.close();
} catch (SQLException e) {e.printStackTrace();}
}
public boolean isConnesso() { return connesso; } // Ritorna TRUE se la connessione con il Database è attiva
public String getErrore() { return errore; } // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
}