MoparClassic/LoginServer/src/org/moparscape/msc/ls/net/DatabaseConnection.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);
}
}