204 lines
5.9 KiB
Java
204 lines
5.9 KiB
Java
package IO;
|
|
|
|
import org.joda.time.Period;
|
|
import org.json.simple.JSONObject;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.sql.*;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
|
|
public class MySQL {
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(MySQL.class);
|
|
|
|
//////////////////////Variablen//////////////////////////
|
|
private Connection conn;
|
|
private Statement stmt;
|
|
private ResultSet something;
|
|
private String driverName = "com.mysql.cj.jdbc.Driver";
|
|
private JSONObject config;
|
|
|
|
/**
|
|
* Creates connection to Database
|
|
*
|
|
* Inspired by https://www.vogella.com/tutorials/MySQLJava/article.html
|
|
*
|
|
* @param config Bot config for data
|
|
*/
|
|
public MySQL(JSONObject config) {
|
|
this.config = config;
|
|
|
|
try {
|
|
//load driver / config driver
|
|
logger.debug("Lade DB Treiber");
|
|
Class driver_class = Class.forName(driverName);
|
|
Driver dbdriver = (Driver) driver_class.newInstance();
|
|
DriverManager.registerDriver(dbdriver);
|
|
|
|
try {
|
|
logger.debug("Create connection to Database");
|
|
//Create connection
|
|
conn = DriverManager.getConnection("jdbc:" + config.get("SQLServerUrl") + config.get("SQLDBNname") + config.get("SQLDBparameter"), (String) config.get("SQLDBUser"), (String) config.get("SQLDBPassword"));
|
|
} catch (SQLException e) {
|
|
logger.error(e.getMessage());
|
|
}
|
|
} catch (Exception e){
|
|
logger.error(e.getMessage());
|
|
}
|
|
|
|
// GetS selfchek going
|
|
Timer timer = new Timer();
|
|
timer.scheduleAtFixedRate(new TimerTask() {
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
stmt = conn.createStatement();
|
|
|
|
//SQL Command
|
|
something = stmt.executeQuery("SELECT 1 FROM Guild;");
|
|
} catch (Exception e){
|
|
logger.error("Database is down! Reconnect!");
|
|
reload();
|
|
}
|
|
}
|
|
},
|
|
1000L, 1000*60*15L);
|
|
}
|
|
|
|
/**
|
|
* prepare, execute a SQL query and returns result
|
|
*
|
|
* @param pInput SQL Query as String
|
|
* @return ResultSet Result of query as ResultSet
|
|
*/
|
|
public ResultSet mySQLDataQuery(String pInput){
|
|
logger.debug("execute SQLQuerry: " + pInput);
|
|
|
|
try {
|
|
//Create statement
|
|
stmt = conn.createStatement();
|
|
|
|
//SQL Command
|
|
something = stmt.executeQuery(pInput);
|
|
} catch (SQLNonTransientConnectionException ex) {
|
|
logger.error(ex.getMessage());
|
|
|
|
//Something happend reload connection
|
|
reload();
|
|
//redo querry
|
|
//return mySQLDataQuery(pInput);
|
|
|
|
} catch (SQLException e){
|
|
logger.error(e.getMessage());
|
|
}
|
|
return something;
|
|
}
|
|
|
|
/**
|
|
* prepare, execute a SQLUpdate query and returns result
|
|
* checks for simple SQL injection
|
|
*
|
|
* @param pInput SQL Query Blueprint as String
|
|
* @param pParameter Data for Blueprint
|
|
* @return key ID of created data INDEX
|
|
*/
|
|
public int mySQLDataUpdate(String pInput, String[] pParameter){
|
|
logger.debug("execute SQLUpdate:" + pInput);
|
|
int key = -1;
|
|
|
|
PreparedStatement stmt = null;
|
|
|
|
try {
|
|
conn.setAutoCommit(false);
|
|
|
|
//set Blueprint
|
|
stmt = conn.prepareStatement(pInput);
|
|
|
|
// Replace Wildcards with Data
|
|
for(int i = 0; i < pParameter.length; i++){
|
|
|
|
stmt.setString(i+1, pParameter[i]);
|
|
}
|
|
|
|
//logger.debug("Execute update");
|
|
stmt.executeUpdate();
|
|
conn.commit();
|
|
|
|
//get generated INDEX IDs
|
|
conn.setAutoCommit(false);
|
|
Statement stmt2 = null;
|
|
stmt2 = conn.createStatement();
|
|
ResultSet tmp = stmt2.executeQuery("SELECT LAST_INSERT_ID();");
|
|
|
|
if(tmp.next()){
|
|
key = Integer.parseInt(tmp.getString(1));
|
|
}
|
|
|
|
} catch (SQLNonTransientConnectionException ex) {
|
|
logger.error(ex.getMessage());
|
|
//Something happend reload connection
|
|
reload();
|
|
//redo querry
|
|
//return mySQLDataUpdate(pInput, pParameter);
|
|
|
|
} catch (SQLException e ) {
|
|
logger.error(e.getMessage());
|
|
}
|
|
|
|
return key;
|
|
}
|
|
|
|
/**
|
|
* closes current connection and reload it
|
|
*/
|
|
private void reload(){
|
|
cleanUp();
|
|
|
|
try {
|
|
//load driver / config driver
|
|
logger.debug("Lade DB Treiber");
|
|
Class driver_class = Class.forName(driverName);
|
|
Driver dbdriver = (Driver) driver_class.newInstance();
|
|
DriverManager.registerDriver(dbdriver);
|
|
|
|
try {
|
|
logger.debug("Create connection to Database");
|
|
//Create connection
|
|
conn = DriverManager.getConnection("jdbc:" + config.get("SQLServerUrl") + config.get("SQLDBNname") + config.get("SQLDBparameter"), (String) config.get("SQLDBUser"), (String) config.get("SQLDBPassword"));
|
|
} catch (SQLException e) {
|
|
logger.error(e.getMessage());
|
|
}
|
|
} catch (Exception e){
|
|
logger.error(e.getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Inspired by https://www.vogella.com/tutorials/MySQLJava/article.html
|
|
*
|
|
* CleanUp of SQL connection
|
|
*/
|
|
public void cleanUp(){
|
|
logger.debug("Close database connection");
|
|
try {
|
|
if (something != null)
|
|
something.close();
|
|
|
|
if (stmt != null)
|
|
stmt.close();
|
|
|
|
conn.setAutoCommit(true);
|
|
|
|
if (conn != null)
|
|
conn.close();
|
|
|
|
something = null;
|
|
stmt = null;
|
|
conn = null;
|
|
} catch(SQLException e){
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
} |