From 9a99bbc9f4817f55addf4ee1c832e0c797af1013 Mon Sep 17 00:00:00 2001 From: Martin <ms618@hdm-stuttgart.de> Date: Tue, 26 Dec 2023 15:00:23 +0100 Subject: [PATCH] Update: AzureDB.java (completed SQL-CRUD methods) Update: GsonHandler.java (removed unnecessary methods) Update: ISQLDataBase.java (completed list of methods) Update: OracleDB.java (completed SQL-CRUD methods) Update: Persistence.java (minor changes) Update: PlayerStatistics.java (minor changes) --- .idea/sqldialects.xml | 3 - .../Persistance/Classes/AzureDB.java | 154 ++++++++++++- .../Persistance/Classes/DBalt.java | 210 ------------------ .../Persistance/Classes/GsonHandler.java | 23 -- .../Persistance/Classes/IDataBasealt.java | 42 ---- .../Persistance/Classes/ISQLDataBase.java | 11 +- .../Persistance/Classes/OracleDB.java | 112 +++++++++- .../Persistance/Classes/Persistence.java | 1 - .../Persistance/Classes/PlayerStatistics.java | 27 +-- 9 files changed, 271 insertions(+), 312 deletions(-) delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 202cd50f..996ed7a2 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -4,7 +4,4 @@ <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_Oracle.sql" dialect="AZURE" /> <file url="PROJECT" dialect="AZURE" /> </component> - <component name="SqlResolveMappings"> - <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java" scope="{"node":{ "@negative":"1", "group":{ "@kind":"root", "node":{ "@negative":"1" } } }}" /> - </component> </project> \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java index d196f940..072b5073 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java @@ -59,28 +59,170 @@ public class AzureDB implements ISQLDataBase { } } - public ArrayList<String> getCommunityMapsList() throws DatabaseError{ + @Override + public ArrayList<MapInfo> getCommunityMapsList() throws DatabaseError{ try(Connection connection = connect()) { - ArrayList<String> tempList = new ArrayList<String>(); - String sql = "SELECT map_name FROM CommunityMaps"; + ArrayList<MapInfo> tempList = new ArrayList<MapInfo>(); + String sql = "SELECT map_id, map_name, map_width, map_height, map_downloads FROM battlearenadata.communitymaps"; PreparedStatement stmt = connection.prepareStatement(sql); log.info("Sending SQL statement"); ResultSet rs = stmt.executeQuery(); while(rs.next()){ - tempList.add(rs.getString("map_name")); + tempList.add(new MapInfo(rs.getString("map_id"), rs.getString("map_name"), rs.getInt("map_width"), rs.getInt("map_height"), rs.getInt("map_downloads"))); } - log.info("SQL query successful"); rs.close(); stmt.close(); + log.info("Community map names retrieved successfully"); return tempList; } catch(Exception e){ log.error(e); - throw new DatabaseError("Error retrieving MapList"); + throw new DatabaseError("Error retrieving community map names"); + } + } + + @Override + public MapData getCommunityMapByID(String mapID) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "SELECT * FROM battlearenadata.communitymaps WHERE map_ID = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, mapID); + + log.info("Sending SQL statement"); + ResultSet rs = stmt.executeQuery(); + + MapData mapChosen = new MapData(rs.getString("map_id"), rs.getString("map_name"), rs.getInt("map_width"), rs.getInt("map_height"), rs.getString("map_data")); + + rs.close(); + stmt.close(); + log.info("Community map retrieved successfully"); + return mapChosen; + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error retrieving community map"); + } + } + + @Override + public void uploadCommunityMap(MapData map) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "INSERT INTO battlearenadata.communitymaps (map_id, map_name, map_width, map_height, map_data) VALUES (?, ?, ?, ?, ?)"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, map.getMapID()); + stmt.setString(2, map.getMapName()); + stmt.setInt(3, map.getMapWidth()); + stmt.setInt(4, map.getMapHeight()); + stmt.setString(5, map.getMapData()); + + log.info("Sending SQL statement"); + stmt.executeQuery(); + + stmt.close(); + log.info("Community Map uploaded successfully"); + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error uploading created community map"); + } + } + + @Override + public void createPlayer(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "INSERT INTO battlearenadata.players (player_name, player_pw, games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, account.getPlayerName()); + stmt.setString(2, account.getAccountPassword()); + stmt.setInt(3, stats.getGamesWon()); + stmt.setInt(4, stats.getGamesLost()); + stmt.setInt(5, stats.getKills()); + stmt.setInt(6, stats.getDeaths()); + stmt.setInt(7, stats.getBlocksDestroyed()); + stmt.setInt(8, stats.getGameTime()); + + log.info("Sending SQL statement"); + stmt.executeQuery(); + + stmt.close(); + log.info("Online account created successfully"); + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error creating online account"); } } + @Override + public String checkCredentials(String playerName) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "SELECT player_pw FROM battlearenadata.players WHERE player_name = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, playerName); + + log.info("Sending SQL statement"); + ResultSet rs = stmt.executeQuery(); + + String password = rs.getString("player_pw"); + + rs.close(); + stmt.close(); + log.info("Player credentials retrieved successfully"); + return password; + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error retrieving retrieving player credentials"); + } + } + + @Override + public PlayerStatistics getStatistics(String playerName) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "SELECT games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time FROM battlearenadata.players WHERE player_name = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, playerName); + + log.info("Sending SQL statement"); + ResultSet rs = stmt.executeQuery(); + + PlayerStatistics stats = new PlayerStatistics(true, rs.getInt("games_won"), rs.getInt("games_lost"), rs.getInt("kills"), rs.getInt("deaths"), rs.getInt("blocks_destroyed"), rs.getInt("ingame_time")); + + rs.close(); + stmt.close(); + log.info("Player statistics retrieved successfully"); + return stats; + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error retrieving player statistics"); + } + } + + @Override + public void updatePlayerStats(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "UPDATE battlearenadata.players SET games_won = ?, games_lost = ?, kills = ?, deaths = ?, blocks_destroyed = ?, ingame_time = ? WHERE player_name = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setInt(1, stats.getGamesWon()); + stmt.setInt(2, stats.getGamesLost()); + stmt.setInt(3, stats.getKills()); + stmt.setInt(4, stats.getDeaths()); + stmt.setInt(5, stats.getBlocksDestroyed()); + stmt.setInt(6, stats.getGameTime()); + stmt.setString(7, account.getPlayerName()); + + log.info("Sending SQL statement"); + + stmt.close(); + log.info("Player statistics updated successfully"); + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error updating player statistics"); + } + } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java deleted file mode 100644 index 024b67e8..00000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java +++ /dev/null @@ -1,210 +0,0 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; - -import de.hdm_stuttgart.battlearena.Exceptions.CryptoException; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - - -import java.io.File; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Properties; -import java.sql.*; - -public class DBalt implements IDataBasealt { - - static String key = "Peters Olivenöl"; - - private static String user=""; - private static String password=""; - private static String[] parts= new String[2]; - - //static File inputFile = new File("src\\main\\resources\\database\\OracleDB_logindetails"); - static File encryptedFile = new File("src\\main\\resources\\database\\AzureDB_logindetails"); - //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted"); - - protected static void getlogindata() throws CryptoException { - parts = CryptoUtils.decrypt(key, encryptedFile); - user = parts[0]; - password = parts[1]; - log.info("AzureDB logindetails: user: " + user + " password: " + password); - } - - private static final Logger log = LogManager.getLogger(DBalt.class); - - - @Override - public Connection connect() throws IOException, SQLException { - - log.info("Loading the properties File!"); - Properties properties = new Properties(); - properties.load(getClass().getClassLoader().getResourceAsStream("config.properties")); - - log.info("Connecting to the database!"); - Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty(user), properties.getProperty(password)); - log.info("Database connection test" + connection.getCatalog()); - - connection.setAutoCommit(true); - - return connection; - } - - - @Override - public void createNewPlayer(String playerName) throws SQLException, IOException { - try(Connection connection = connect()) { - String sql = "INSERT INTO players (player_name, games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time)" + "VALUES (?,?,?,?,?,?,?)"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, playerName); - preparedStatement.setInt(2, 0); - preparedStatement.setInt(3, 0); - preparedStatement.setInt(4, 0); - preparedStatement.setInt(5, 0); - preparedStatement.setInt(6, 0); - preparedStatement.setInt(7, 0); - - log.info("Inserting new player"); - preparedStatement.execute(); - } - } - - @Override - public void createMap(String name, int length, int width, String mapData) throws SQLException, IOException { - try(Connection connection = connect()) { - String mapSize = length + "X" + width; - - String sql = "INSERT INTO battleArena.dbo.maps (map_name, map_size, map_data, map_version, map_hash) VALUES(?,?,?,?,?)"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, name); - preparedStatement.setString(2, mapSize); - preparedStatement.setString(3, mapData); - - log.info("Inserting new map"); - preparedStatement.execute(); - } - } - - @Override - public LinkedHashMap<String, String> getMapNames() throws SQLException, IOException { - LinkedHashMap<String, String> mapNames = new LinkedHashMap<>(); - - try(Connection connection = connect()) { - String sql = "SELECT maps.map_id, maps.map_name FROM maps"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - ResultSet results = preparedStatement.executeQuery(); - log.info("Getting map names"); - while (results.next()) { - mapNames.put(results.getString("map_id"), results.getString("map_name")); - } - connection.close(); - return mapNames; - } - } - - @Override - public String getMapByID(String ID) throws SQLException, IOException { - try(Connection connection = connect()) { - String sql = "SELECT map_name FROM maps WHERE map_id = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, ID); - log.info("Getting Map..."); - String map = preparedStatement.executeQuery().toString(); - return map; - } - } - - @Override - public String getMapSizeByID(String ID) throws SQLException, IOException { - try(Connection connection = connect()) { - String sql = "SELECT map_size FROM maps WHERE battleArena.dbo.maps.map_id=?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, ID); - ResultSet result = preparedStatement.executeQuery(); - log.info("getting map size..."); - String mapSize = result.getString("map_size"); - return mapSize; - } - } - - @Override - public ResultSet getStatistics(String playerName) throws SQLException, IOException { - try(Connection connection = connect()){ - String sql = "SELECT * FROM players where player_name = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, playerName); - ResultSet resultSet = preparedStatement.executeQuery(); - log.info("getting statistics..."); - return resultSet; - } - } - - @Override - public void updateMap(String mapID, String mapName, String mapData) throws SQLException, IOException { - try(Connection connection = connect()) { - String sql = "UPDATE maps SET map_name = ?, map_data = ? WHERE map_id = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, mapName); - preparedStatement.setString(2, mapData); - preparedStatement.setString(3, mapID); - preparedStatement.execute(); - log.info("updating map in Database"); - } - } - - - @Override - public void updatePlayerName(String playerNameNew, String playerNameOld) throws SQLException, IOException { - try(Connection connection = connect()){ - String sql = "UPDATE players SET player_name = ? WHERE player_name = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, playerNameNew); - preparedStatement.setString(2, playerNameOld); - preparedStatement.execute(); - log.info("updating player name in Database..."); - } - } - - @Override - public void updatePlayerStatistics(String playerName, int gamesWon, int gamesLost, int kills, int deaths, int blocksDestroyed, int gameTime) throws SQLException, IOException { - try (Connection connection = connect()){ - String sql = "UPDATE players SET games_won = ?, games_lost = ?, kills = ?, " + "deaths = ?, blocks_destroyed = ?, ingame_time = ? WHERE player_name = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setInt(1, gamesWon); - preparedStatement.setInt(2, gamesLost); - preparedStatement.setInt(3, kills); - preparedStatement.setInt(4, deaths); - preparedStatement.setInt(5, blocksDestroyed); - preparedStatement.setInt(6, gameTime); - preparedStatement.setString(7, playerName); - preparedStatement.execute(); - log.info("updating player statistics"); - - } - } - - - @Override - public void deletePlayer(String playerName) throws IOException, SQLException { - try(Connection connection = connect()) { - String sql = "DELETE FROM players WHERE player_name=?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, playerName); - preparedStatement.execute(); - log.info("deleting player"); - - } - } - - @Override - public void deleteMap(String mapID) throws SQLException, IOException { - try(Connection connection = connect()) { - String sql = "DELETE * FROM maps WHERE map_id = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setString(1, mapID); - preparedStatement.execute(); - log.info("deleting map..."); - } - } - - -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java index 4fd108e0..ce0d0608 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java @@ -24,7 +24,6 @@ public class GsonHandler { private final String filePathCoreMaps = "src/main/resources/maps/coreMaps.json"; private final String filePathCommunityMaps = "src/main/resources/maps/communityMaps.json"; private final String filePathPlayerStats = "src/main/resources/player/playerStatsLocal.json"; - private final String filePathPlayerAccount = "src/main/resources/player/playerAccount.json"; private final String filePathSettings = "src/main/resources/player/appSettings.json"; public ArrayList<MapData> loadMaps(MapType type) throws DatabaseError{ @@ -110,26 +109,4 @@ public class GsonHandler { } } - public PlayerAccount loadAccount() throws DatabaseError{ - try (FileReader reader = new FileReader(filePathPlayerAccount)) { - PlayerAccount account = gson.fromJson(reader, accountType); - log.info("GSON - Player account information successfully loaded from JSON"); - return account; - } catch (Exception e) { - log.info(e); - log.info("GSON - Loading player account information from JSON failed"); - throw new DatabaseError("Error loading player account information!"); - } - } - - public void saveAccount(PlayerAccount account) throws DatabaseError{ - try (FileWriter writer = new FileWriter(filePathPlayerAccount)) { - gson.toJson(account, writer); - log.info("GSON - Player account information successfully saved to JSON"); - } catch (Exception e) { - log.info(e); - log.info("GSON - Saving player account information to JSON failed"); - throw new DatabaseError("Error loading player account information!"); - } - } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java deleted file mode 100644 index fbd43943..00000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; - -import java.io.IOException; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.LinkedHashMap; - -public interface IDataBasealt { - - //connection-Methods - Connection connect() throws IOException, SQLException; - - - //CRUD Operations - - //Create Operations - void createNewPlayer(String playerName) throws SQLException, IOException; - - void createMap(String name, int length, int width, String mapData) throws SQLException, IOException; - - //Read-operations - LinkedHashMap<String, String> getMapNames() throws SQLException, IOException; - String getMapByID(String ID) throws SQLException, IOException; - String getMapSizeByID(String ID) throws SQLException, IOException; - - - - ResultSet getStatistics(String playerName) throws SQLException, IOException; - - //Update-operations - void updateMap(String mapID , String mapName, String mapData) throws SQLException, IOException; - - void updatePlayerName(String playerNameNew, String PlayerNameOld) throws SQLException, IOException; - - void updatePlayerStatistics(String playerName, int gamesWon, int gamesLost, int kills, int deaths, int blocksDestroyed, int gameTime) throws SQLException, IOException; - - - //Delete-operations - void deletePlayer(String playerName) throws IOException, SQLException; - void deleteMap(String mapID) throws SQLException, IOException; -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java index 5403c83e..f2c31759 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java @@ -8,8 +8,17 @@ import java.util.ArrayList; public interface ISQLDataBase { - Connection connect() throws DatabaseError, CryptoException; + //Establish Connection + Connection connect() throws DatabaseError; + //CRUD Operations in SQL ArrayList<MapData> getCoreMaps() throws DatabaseError; + ArrayList<MapInfo> getCommunityMapsList() throws DatabaseError; + MapData getCommunityMapByID(String mapID) throws DatabaseError; + void uploadCommunityMap(MapData map) throws DatabaseError; + void createPlayer(PlayerStatistics stats, PlayerAccount account) throws DatabaseError; + String checkCredentials(String playerName) throws DatabaseError; + PlayerStatistics getStatistics(String playerName) throws DatabaseError; + void updatePlayerStats(PlayerStatistics stats, PlayerAccount account) throws DatabaseError; } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java index 11b88881..003c5439 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java @@ -24,16 +24,17 @@ public class OracleDB implements ISQLDataBase { //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted"); private static final Logger log = LogManager.getLogger(OracleDB.class); - public static void getlogindata() throws CryptoException { + public static void getLoginData() throws CryptoException { parts = CryptoUtils.decrypt(key, encryptedFile); user = parts[0]; password = parts[1]; log.info("OracleDB_logindetails: user: " + user + " password: " + password); } + @Override - public Connection connect() throws DatabaseError, CryptoException { - //getlogindata(); + public Connection connect() throws DatabaseError{ try { + getLoginData(); OracleDataSource ods = new OracleDataSource(); ods.setURL("jdbc:oracle:thin:@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=g093caf2cf1fea4_battlearena_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))"); ods.setUser(user); @@ -74,6 +75,7 @@ public class OracleDB implements ISQLDataBase { } } + @Override public ArrayList<MapInfo> getCommunityMapsList() throws DatabaseError{ try(Connection connection = connect()) { ArrayList<MapInfo> tempList = new ArrayList<MapInfo>(); @@ -97,6 +99,7 @@ public class OracleDB implements ISQLDataBase { } } + @Override public MapData getCommunityMapByID(String mapID) throws DatabaseError{ try(Connection connection = connect()) { String sql = "SELECT * FROM battlearenadata.communitymaps WHERE map_ID = ?"; @@ -119,6 +122,7 @@ public class OracleDB implements ISQLDataBase { } } + @Override public void uploadCommunityMap(MapData map) throws DatabaseError{ try(Connection connection = connect()) { String sql = "INSERT INTO battlearenadata.communitymaps (map_id, map_name, map_width, map_height, map_data) VALUES (?, ?, ?, ?, ?)"; @@ -133,7 +137,7 @@ public class OracleDB implements ISQLDataBase { stmt.executeQuery(); stmt.close(); - log.info("Community Map retrieved successfully"); + log.info("Community Map uploaded successfully"); } catch(Exception e){ log.error(e); @@ -141,10 +145,100 @@ public class OracleDB implements ISQLDataBase { } } -/* - public void updateCommunityStats(Persistence persistence){ - //Update the commulative Stats + @Override + public void createPlayer(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "INSERT INTO battlearenadata.players (player_name, player_pw, games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, account.getPlayerName()); + stmt.setString(2, account.getAccountPassword()); + stmt.setInt(3, stats.getGamesWon()); + stmt.setInt(4, stats.getGamesLost()); + stmt.setInt(5, stats.getKills()); + stmt.setInt(6, stats.getDeaths()); + stmt.setInt(7, stats.getBlocksDestroyed()); + stmt.setInt(8, stats.getGameTime()); + + log.info("Sending SQL statement"); + stmt.executeQuery(); + + stmt.close(); + log.info("Online account created successfully"); + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error creating online account"); + } } -*/ -} + @Override + public String checkCredentials(String playerName) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "SELECT player_pw FROM battlearenadata.players WHERE player_name = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, playerName); + + log.info("Sending SQL statement"); + ResultSet rs = stmt.executeQuery(); + + String password = rs.getString("player_pw"); + + rs.close(); + stmt.close(); + log.info("Player credentials retrieved successfully"); + return password; + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error retrieving retrieving player credentials"); + } + } + + @Override + public PlayerStatistics getStatistics(String playerName) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "SELECT games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time FROM battlearenadata.players WHERE player_name = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setString(1, playerName); + + log.info("Sending SQL statement"); + ResultSet rs = stmt.executeQuery(); + + PlayerStatistics stats = new PlayerStatistics(true, rs.getInt("games_won"), rs.getInt("games_lost"), rs.getInt("kills"), rs.getInt("deaths"), rs.getInt("blocks_destroyed"), rs.getInt("ingame_time")); + + rs.close(); + stmt.close(); + log.info("Player statistics retrieved successfully"); + return stats; + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error retrieving player statistics"); + } + } + + @Override + public void updatePlayerStats(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{ + try(Connection connection = connect()) { + String sql = "UPDATE battlearenadata.players SET games_won = ?, games_lost = ?, kills = ?, deaths = ?, blocks_destroyed = ?, ingame_time = ? WHERE player_name = ?"; + PreparedStatement stmt = connection.prepareStatement(sql); + stmt.setInt(1, stats.getGamesWon()); + stmt.setInt(2, stats.getGamesLost()); + stmt.setInt(3, stats.getKills()); + stmt.setInt(4, stats.getDeaths()); + stmt.setInt(5, stats.getBlocksDestroyed()); + stmt.setInt(6, stats.getGameTime()); + stmt.setString(7, account.getPlayerName()); + + log.info("Sending SQL statement"); + + stmt.close(); + log.info("Player statistics updated successfully"); + } + catch(Exception e){ + log.error(e); + throw new DatabaseError("Error updating player statistics"); + } + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java index c5c12aad..56b554be 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java @@ -95,7 +95,6 @@ public class Persistence { public void loadPlayerAccount() { try { - account = gsonHandler.loadAccount(); //hier muss dann Entschlüsselung stattfinden, da GSON zuerst die verschlüsselten Accountdaten (Passwort und Username) als String speichert } catch(Exception e){ diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java index fc462051..1068ee89 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java @@ -6,16 +6,16 @@ import org.apache.logging.log4j.LogManager; public class PlayerStatistics { private static final Logger log = LogManager.getLogger(PlayerStatistics.class); - private String playerName; - private int gamesLost; - private int gamesWon; - private int kills; - private int deaths; - private int blocksDestroyed; - private int gameTime; - - public PlayerStatistics(String playerName, int gamesLost, int gamesWon, int kills, int deaths, int blocksDestroyed, int gameTime) { - this.playerName = playerName; + private boolean statsLoaded = false; //indicator, if stats were loaded at startup from JSON/SQL + private int gamesLost = 0; + private int gamesWon = 0; + private int kills = 0; + private int deaths = 0; + private int blocksDestroyed = 0; + private int gameTime = 0; + + public PlayerStatistics(boolean statsLoaded, int gamesLost, int gamesWon, int kills, int deaths, int blocksDestroyed, int gameTime) { + this.statsLoaded = statsLoaded; this.gamesLost = gamesLost; this.gamesWon = gamesWon; this.kills = kills; @@ -24,13 +24,6 @@ public class PlayerStatistics { this.gameTime = gameTime; } - public String getPlayerName() { - return playerName; - } - - public void setPlayerName(String playerName) { - this.playerName = playerName; - } public int getGamesLost() { return gamesLost; -- GitLab