Fix PreparedStatement bug in ScoreDB with null string fields.
This was causing deleteScoreStmt to always fail. Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
@@ -119,7 +119,9 @@ public class ScoreDB {
|
|||||||
"timestamp = ? AND MID = ? AND MSID = ? AND title = ? AND artist = ? AND " +
|
"timestamp = ? AND MID = ? AND MSID = ? AND title = ? AND artist = ? AND " +
|
||||||
"creator = ? AND version = ? AND hit300 = ? AND hit100 = ? AND hit50 = ? AND " +
|
"creator = ? AND version = ? AND hit300 = ? AND hit100 = ? AND hit50 = ? AND " +
|
||||||
"geki = ? AND katu = ? AND miss = ? AND score = ? AND combo = ? AND perfect = ? AND mods = ? AND " +
|
"geki = ? AND katu = ? AND miss = ? AND score = ? AND combo = ? AND perfect = ? AND mods = ? AND " +
|
||||||
"replay = ? AND playerName = ?"
|
"(replay = ? OR (replay IS NULL AND ? IS NULL)) AND " +
|
||||||
|
"(playerName = ? OR (playerName IS NULL AND ? IS NULL))"
|
||||||
|
// TODO: extra playerName checks not needed if name is guaranteed not null
|
||||||
);
|
);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
ErrorHandler.error("Failed to prepare score statements.", e, true);
|
ErrorHandler.error("Failed to prepare score statements.", e, true);
|
||||||
@@ -222,6 +224,7 @@ public class ScoreDB {
|
|||||||
try {
|
try {
|
||||||
setStatementFields(insertStmt, data);
|
setStatementFields(insertStmt, data);
|
||||||
insertStmt.setString(18, data.replayString);
|
insertStmt.setString(18, data.replayString);
|
||||||
|
insertStmt.setString(19, data.playerName);
|
||||||
insertStmt.executeUpdate();
|
insertStmt.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
ErrorHandler.error("Failed to save score to database.", e, true);
|
ErrorHandler.error("Failed to save score to database.", e, true);
|
||||||
@@ -238,6 +241,10 @@ public class ScoreDB {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
setStatementFields(deleteScoreStmt, data);
|
setStatementFields(deleteScoreStmt, data);
|
||||||
|
deleteScoreStmt.setString(18, data.replayString);
|
||||||
|
deleteScoreStmt.setString(19, data.replayString);
|
||||||
|
deleteScoreStmt.setString(20, data.playerName);
|
||||||
|
deleteScoreStmt.setString(21, data.playerName);
|
||||||
deleteScoreStmt.executeUpdate();
|
deleteScoreStmt.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
ErrorHandler.error("Failed to delete score from database.", e, true);
|
ErrorHandler.error("Failed to delete score from database.", e, true);
|
||||||
@@ -289,8 +296,6 @@ public class ScoreDB {
|
|||||||
stmt.setInt(15, data.combo);
|
stmt.setInt(15, data.combo);
|
||||||
stmt.setBoolean(16, data.perfect);
|
stmt.setBoolean(16, data.perfect);
|
||||||
stmt.setInt(17, data.mods);
|
stmt.setInt(17, data.mods);
|
||||||
stmt.setString(18, data.replayString);
|
|
||||||
stmt.setString(19, data.playerName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user