Cleanup post db-refactor.
This commit is contained in:
@@ -61,11 +61,11 @@ public class dbBuildingHandler extends dbHandlerBase {
|
|||||||
if (upgradeDate != null)
|
if (upgradeDate != null)
|
||||||
preparedStatement.setTimestamp(13, new java.sql.Timestamp(upgradeDate.getMillis()));
|
preparedStatement.setTimestamp(13, new java.sql.Timestamp(upgradeDate.getMillis()));
|
||||||
else
|
else
|
||||||
setNULL(13, java.sql.Types.DATE);
|
preparedStatement.setNull(13, java.sql.Types.DATE);
|
||||||
|
|
||||||
setInt(14, blueprintUUID);
|
preparedStatement.setInt(14, blueprintUUID);
|
||||||
setFloat(15, w);
|
preparedStatement.setFloat(15, w);
|
||||||
setFloat(16, rotY);
|
preparedStatement.setFloat(16, rotY);
|
||||||
|
|
||||||
ResultSet rs = preparedStatement.executeQuery();
|
ResultSet rs = preparedStatement.executeQuery();
|
||||||
|
|
||||||
|
|||||||
@@ -103,8 +103,7 @@ public class dbCSSessionHandler extends dbHandlerBase {
|
|||||||
ResultSet rs = preparedStatement.executeQuery();
|
ResultSet rs = preparedStatement.executeQuery();
|
||||||
|
|
||||||
if (rs.next())
|
if (rs.next())
|
||||||
css = new CSSession(secKey, DbManager.AccountQueries.GET_ACCOUNT(rs.getInt("accountID")), PlayerCharacter.getPlayerCharacter(rs
|
css = new CSSession(secKey, DbManager.AccountQueries.GET_ACCOUNT(rs.getInt("accountID")), PlayerCharacter.getPlayerCharacter(rs.getInt("characterID")), rs.getString("machineID"));
|
||||||
.getInt("characterID")), getString("machineID"));
|
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
Logger.error(e);
|
Logger.error(e);
|
||||||
|
|||||||
@@ -69,13 +69,14 @@ public class dbCityHandler extends dbHandlerBase {
|
|||||||
preparedStatement.setFloat(10, W);
|
preparedStatement.setFloat(10, W);
|
||||||
preparedStatement.setTimestamp(11, Timestamp.valueOf(upgradeTime));
|
preparedStatement.setTimestamp(11, Timestamp.valueOf(upgradeTime));
|
||||||
|
|
||||||
boolean work = execute();
|
boolean work = preparedStatement.execute();
|
||||||
|
|
||||||
if (work) {
|
if (work) {
|
||||||
|
|
||||||
ResultSet rs = preparedStatement.getResultSet();
|
ResultSet rs = preparedStatement.getResultSet();
|
||||||
while (rs.next()) {
|
|
||||||
|
while (rs.next())
|
||||||
addObject(objectList, rs);
|
addObject(objectList, rs);
|
||||||
}
|
|
||||||
rs.close();
|
rs.close();
|
||||||
} else {
|
} else {
|
||||||
Logger.info("City Placement Failed: " + preparedStatement);
|
Logger.info("City Placement Failed: " + preparedStatement);
|
||||||
|
|||||||
@@ -9,287 +9,20 @@
|
|||||||
|
|
||||||
package engine.db.handlers;
|
package engine.db.handlers;
|
||||||
|
|
||||||
import engine.Enum;
|
|
||||||
import engine.Enum.GameObjectType;
|
import engine.Enum.GameObjectType;
|
||||||
import engine.gameManager.ConfigManager;
|
|
||||||
import engine.gameManager.DbManager;
|
import engine.gameManager.DbManager;
|
||||||
import engine.objects.AbstractGameObject;
|
import engine.objects.AbstractGameObject;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.server.MBServerStatics;
|
|
||||||
import org.pmw.tinylog.Logger;
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.ResultSet;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
public abstract class dbHandlerBase {
|
public abstract class dbHandlerBase {
|
||||||
|
|
||||||
protected final ThreadLocal<CallableStatement> callableStatement = new ThreadLocal<>();
|
|
||||||
protected final ThreadLocal<Connection> connection = new ThreadLocal<>();
|
|
||||||
/*
|
|
||||||
* CallableStatements handled below this line!
|
|
||||||
*/
|
|
||||||
protected Class<? extends AbstractGameObject> localClass = null;
|
protected Class<? extends AbstractGameObject> localClass = null;
|
||||||
protected GameObjectType localObjectType;
|
protected GameObjectType localObjectType;
|
||||||
|
|
||||||
protected final void prepareCallable(final String sql) {
|
|
||||||
try {
|
|
||||||
this.connection.set(DbManager.getConnection());
|
|
||||||
this.callableStatement.set(this.connection.get().prepareCall(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY));
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("DbManager.getConn", e);
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setInt(int parameterIndex, int value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setInt(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setLong(int parameterIndex, long value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setLong(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setFloat(int parameterIndex, float value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setFloat(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setShort(int parameterIndex, short value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setShort(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setString(int parameterIndex, String value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setString(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setByte(int parameterIndex, byte value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setByte(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setBoolean(int parameterIndex, boolean value) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setBoolean(parameterIndex, value);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setNULL(int parameterIndex, int type) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setNull(parameterIndex, type);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setLocalDateTime(int parameterIndex, LocalDateTime localDateTime) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setTimestamp(parameterIndex, Timestamp.valueOf(localDateTime));
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void setTimeStamp(int parameterIndex, long time) {
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().setTimestamp(parameterIndex, new java.sql.Timestamp(time));
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final boolean execute() {
|
|
||||||
try {
|
|
||||||
return this.callableStatement.get().execute();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
logSQLCommand();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final ResultSet executeQuery() {
|
|
||||||
try {
|
|
||||||
return this.callableStatement.get().executeQuery();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
logSQLCommand();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final int executeUpdate() {
|
|
||||||
return executeUpdate(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final int executeUpdate(boolean close) {
|
|
||||||
try {
|
|
||||||
return this.callableStatement.get().executeUpdate();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
if (close)
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void logSQLCommand() {
|
|
||||||
try {
|
|
||||||
Logger.error("Failed SQL Command: " + this.callableStatement.get().toString());
|
|
||||||
} catch (Exception e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Common return values from the database when calling stored procedures, abstracted to this layer
|
|
||||||
protected final String getResult() {
|
|
||||||
try {
|
|
||||||
ResultSet rs = this.executeQuery();
|
|
||||||
if (rs.next() && !isError(rs))
|
|
||||||
return rs.getString("result");
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used for Stored procedures that return true when they succeed.
|
|
||||||
protected final boolean worked() {
|
|
||||||
try {
|
|
||||||
ResultSet rs = this.executeQuery();
|
|
||||||
if (rs.next() && !isError(rs))
|
|
||||||
return rs.getBoolean("result");
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Common return values from the database when calling stored procedures, abstracted to this layer
|
|
||||||
protected final long getUUID() {
|
|
||||||
try {
|
|
||||||
ResultSet rs = this.executeQuery();
|
|
||||||
if (rs.next() && !isError(rs))
|
|
||||||
return rs.getLong("UID");
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final String getString(String field) {
|
|
||||||
try {
|
|
||||||
ResultSet rs = this.executeQuery();
|
|
||||||
if (rs.next())
|
|
||||||
return rs.getString(field);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final long getLong(String field) {
|
|
||||||
try {
|
|
||||||
ResultSet rs = this.executeQuery();
|
|
||||||
if (rs.next())
|
|
||||||
return rs.getLong(field);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final int getInt(String field) {
|
|
||||||
try {
|
|
||||||
ResultSet rs = this.executeQuery();
|
|
||||||
if (rs.next())
|
|
||||||
return rs.getInt(field);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final int insertGetUUID() {
|
|
||||||
int key = 0;
|
|
||||||
try {
|
|
||||||
this.callableStatement.get().executeUpdate();
|
|
||||||
ResultSet rs = this.callableStatement.get().getGeneratedKeys();
|
|
||||||
if (rs.next())
|
|
||||||
key = rs.getInt(1);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error(e);
|
|
||||||
logSQLCommand();
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final boolean isError(ResultSet rs) throws SQLException {
|
|
||||||
ResultSetMetaData rsmd = rs.getMetaData();
|
|
||||||
if (rsmd.getColumnCount() > 0 && !rsmd.getColumnName(1).equals("errorno"))
|
|
||||||
return false;
|
|
||||||
printError(rs);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final void printError(ResultSet rs) {
|
|
||||||
try {
|
|
||||||
int errorNum = rs.getInt("errorno");
|
|
||||||
String errorMsg = rs.getString("errormsg");
|
|
||||||
Logger.error("SQLError: errorNum: " + errorNum + ", errorMsg: " + errorMsg);
|
|
||||||
logSQLCommand();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T extends AbstractGameObject> AbstractGameObject getObjectFromRs(ResultSet rs) {
|
protected <T extends AbstractGameObject> AbstractGameObject getObjectFromRs(ResultSet rs) {
|
||||||
|
|
||||||
AbstractGameObject abstractGameObject = null;
|
AbstractGameObject abstractGameObject = null;
|
||||||
@@ -331,150 +64,5 @@ public abstract class dbHandlerBase {
|
|||||||
Logger.error(e);
|
Logger.error(e);
|
||||||
}
|
}
|
||||||
return objectList;
|
return objectList;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T extends AbstractGameObject> AbstractGameObject getObjectSingle(int id) {
|
|
||||||
return getObjectSingle(id, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T extends AbstractGameObject> AbstractGameObject getObjectSingle(int id, boolean forceFromDB, boolean storeInCache) {
|
|
||||||
|
|
||||||
if (callableStatement.get() == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!forceFromDB) {
|
|
||||||
if (DbManager.inCache(localObjectType, id)) {
|
|
||||||
closeCallable();
|
|
||||||
return DbManager.getFromCache(localObjectType, id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractGameObject out = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (MBServerStatics.DB_ENABLE_QUERY_OUTPUT)
|
|
||||||
Logger.info("[GetObjectList] Executing query:" + callableStatement.get().toString());
|
|
||||||
|
|
||||||
ResultSet rs = callableStatement.get().executeQuery();
|
|
||||||
|
|
||||||
if (rs.next()) {
|
|
||||||
out = localClass.getConstructor(ResultSet.class).newInstance(rs);
|
|
||||||
|
|
||||||
if (storeInCache)
|
|
||||||
DbManager.addToCache(out);
|
|
||||||
}
|
|
||||||
|
|
||||||
rs.close();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.error("AbstractGameObject", e);
|
|
||||||
out = null;
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only call runAfterLoad() for objects instanced on the world server
|
|
||||||
|
|
||||||
if ((out != null && out instanceof AbstractWorldObject) &&
|
|
||||||
(ConfigManager.serverType.equals(Enum.ServerType.WORLDSERVER) ||
|
|
||||||
(out.getObjectType() == GameObjectType.Guild)))
|
|
||||||
((AbstractWorldObject) out).runAfterLoad();
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void closeCallable() {
|
|
||||||
try {
|
|
||||||
if (this.callableStatement.get() != null)
|
|
||||||
this.callableStatement.get().close();
|
|
||||||
|
|
||||||
this.connection.get().close();
|
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T extends AbstractGameObject> ArrayList<T> getObjectList() {
|
|
||||||
return getObjectList(20, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T extends AbstractGameObject> ArrayList<T> getLargeObjectList() {
|
|
||||||
return getObjectList(2000, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
protected <T extends AbstractGameObject> ArrayList<T> getObjectList(int listSize, boolean forceFromDB) {
|
|
||||||
|
|
||||||
String query = "No Callable Statement accessable.";
|
|
||||||
|
|
||||||
ArrayList<T> out = new ArrayList<>(listSize);
|
|
||||||
|
|
||||||
if (this.callableStatement.get() == null)
|
|
||||||
return out;
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
CallableStatement css = this.callableStatement.get();
|
|
||||||
|
|
||||||
if (css != null)
|
|
||||||
query = this.callableStatement.get().toString();
|
|
||||||
|
|
||||||
if (MBServerStatics.DB_ENABLE_QUERY_OUTPUT)
|
|
||||||
Logger.info("[GetObjectList] Executing query:" + query);
|
|
||||||
|
|
||||||
ResultSet rs = this.callableStatement.get().executeQuery();
|
|
||||||
|
|
||||||
while (rs.next()) {
|
|
||||||
|
|
||||||
int id = rs.getInt(1);
|
|
||||||
|
|
||||||
if (!forceFromDB && DbManager.inCache(localObjectType, id)) {
|
|
||||||
out.add((T) DbManager.getFromCache(localObjectType, id));
|
|
||||||
} else {
|
|
||||||
AbstractGameObject toAdd = localClass.getConstructor(ResultSet.class).newInstance(rs);
|
|
||||||
DbManager.addToCache(toAdd);
|
|
||||||
out.add((T) toAdd);
|
|
||||||
|
|
||||||
if (toAdd != null && toAdd instanceof AbstractWorldObject)
|
|
||||||
((AbstractWorldObject) toAdd).runAfterLoad();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rs.close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.error(localClass.getCanonicalName(), "List Failure: " + query, e);
|
|
||||||
e.printStackTrace();
|
|
||||||
return new ArrayList<>(); // Do we want a null return on error?
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prepared Statements handled below this line */
|
|
||||||
|
|
||||||
protected HashSet<Integer> getIntegerList(final int columnNumber) {
|
|
||||||
|
|
||||||
if (MBServerStatics.DB_ENABLE_QUERY_OUTPUT)
|
|
||||||
Logger.info("[GetIntegerList] Executing query:" + this.callableStatement);
|
|
||||||
|
|
||||||
HashSet<Integer> out = new HashSet<>();
|
|
||||||
|
|
||||||
try {
|
|
||||||
ResultSet rs = executeQuery();
|
|
||||||
|
|
||||||
while (rs.next()) {
|
|
||||||
out.add(rs.getInt(columnNumber));
|
|
||||||
}
|
|
||||||
rs.close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Logger.error("SQL Error number: " + e.getErrorCode());
|
|
||||||
} finally {
|
|
||||||
closeCallable();
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user