128 lines
2.9 KiB
Java
128 lines
2.9 KiB
Java
package org.moparscape.msc.ls.net;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.sql.Statement;
|
|
|
|
import org.moparscape.msc.ls.Server;
|
|
import org.moparscape.msc.ls.util.Config;
|
|
|
|
|
|
/**
|
|
* Used to interact with the database.
|
|
*/
|
|
public class DatabaseConnection {
|
|
static {
|
|
testForDriver();
|
|
}
|
|
|
|
/**
|
|
* Tests we have a mysql Driver
|
|
*/
|
|
private static void testForDriver() {
|
|
try {
|
|
Class.forName("com.mysql.jdbc.Driver");
|
|
} catch (ClassNotFoundException cnfe) {
|
|
Server.error(cnfe);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The database connection in use
|
|
*/
|
|
private Connection con;
|
|
|
|
/**
|
|
* The last query being executed
|
|
*/
|
|
private String lastQuery;
|
|
|
|
/**
|
|
* A statement for running queries on
|
|
*/
|
|
private Statement statement;
|
|
|
|
/**
|
|
* Instantiates a new database connection
|
|
*/
|
|
public DatabaseConnection() {
|
|
if (!createConnection()) {
|
|
Server.error(new Exception("Unable to connect to MySQL"));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Closes the database conection.
|
|
*
|
|
* @throws SQLException
|
|
* if there was an error when closing the connection
|
|
*/
|
|
public void close() throws SQLException {
|
|
con.close();
|
|
con = null;
|
|
}
|
|
|
|
public boolean createConnection() {
|
|
try {
|
|
con = DriverManager.getConnection("jdbc:mysql://" + Config.MYSQL_HOST + "/" + Config.MYSQL_DB, Config.MYSQL_USER, Config.MYSQL_PASS);
|
|
statement = con.createStatement();
|
|
statement.setEscapeProcessing(true);
|
|
return isConnected();
|
|
} catch (SQLException e) {
|
|
Server.error(e.getMessage());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Runs a select query on the current database connection
|
|
*
|
|
* @param s
|
|
* The query to be ran
|
|
*/
|
|
public synchronized ResultSet getQuery(String q) throws SQLException {
|
|
try {
|
|
lastQuery = q;
|
|
return statement.executeQuery(q);
|
|
} catch (SQLException e) {
|
|
if (!isConnected() && createConnection()) {
|
|
return getQuery(q);
|
|
}
|
|
throw new SQLException(e.getMessage() + ": '" + lastQuery + "'", e.getSQLState(), e.getErrorCode());
|
|
}
|
|
}
|
|
|
|
public boolean isConnected() {
|
|
try {
|
|
statement.executeQuery("SELECT CURRENT_DATE");
|
|
return true;
|
|
} catch (SQLException e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Runs a update/insert/replace query on the current database connection
|
|
*
|
|
* @param s
|
|
* The query to be ran
|
|
*/
|
|
public synchronized int updateQuery(String q) throws SQLException {
|
|
try {
|
|
lastQuery = q;
|
|
return statement.executeUpdate(q);
|
|
} catch (SQLException e) {
|
|
if (!isConnected() && createConnection()) {
|
|
return updateQuery(q);
|
|
}
|
|
throw new SQLException(e.getMessage() + ": '" + lastQuery + "'", e.getSQLState(), e.getErrorCode());
|
|
}
|
|
}
|
|
|
|
public java.sql.PreparedStatement prepareStatement(String statement) throws SQLException {
|
|
return con.prepareStatement(statement);
|
|
}
|
|
}
|