From cd1c5f19d6c43a8f390d35c01bc610160702504e Mon Sep 17 00:00:00 2001 From: jg175 <jg175@hdm-stuttgart.de> Date: Mon, 4 Dec 2023 14:40:44 +0100 Subject: [PATCH] Add: Methods for Requests to Database, Implents Interface IDataBase. This Commit fixes issue #16 --- .idea/dataSources.xml | 12 ++ .idea/sqldialects.xml | 7 + .../Persistance/Classes/AzureDB.java | 177 ++++++++++++++++++ .../Persistance/Classes/DataBase.java | 10 - .../Persistance/Classes/MapData.java | 7 + .../Persistance/Classes/Persistence.java | 7 + .../Persistance/Classes/PlayerStatistics.java | 7 + src/main/resources/player/player.txt | 0 8 files changed, 217 insertions(+), 10 deletions(-) create mode 100644 .idea/dataSources.xml create mode 100644 .idea/sqldialects.xml create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DataBase.java create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java create mode 100644 src/main/resources/player/player.txt diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 00000000..f07edf43 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="DataSourceManagerImpl" format="xml" multifile-model="true"> + <data-source source="LOCAL" name="battleArena@battlearena.database.windows.net" uuid="7b1fc391-14cb-46cf-a8a0-29c091f02047"> + <driver-ref>azure.ms</driver-ref> + <synchronize>true</synchronize> + <jdbc-driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc-driver> + <jdbc-url>jdbc:sqlserver://battlearena.database.windows.net:1433;database=battleArena;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;</jdbc-url> + <working-dir>$ProjectFileDir$</working-dir> + </data-source> + </component> +</project> \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 00000000..8e588091 --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="SqlDialectMappings"> + <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script.sql" dialect="GenericSQL" /> + <file url="PROJECT" dialect="AZURE" /> + </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 new file mode 100644 index 00000000..c02cf914 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java @@ -0,0 +1,177 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; + +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Properties; +import java.sql.*; + +public class DataBase implements IDataBase { + + private static final Logger log = LogManager.getLogger(DataBase.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 { + 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); + + preparedStatement.execute(); + connection.close(); + } + + @Override + public void createMap(String name, int length, int width, String mapData) throws SQLException, IOException { + Connection connection = connect(); + String mapSize = length + "X" + width; + + String sql = "INSERT INTO battleArena.dbo.maps (map_name, map_size, map_data) VALUES(?,?,?)"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, name); + preparedStatement.setString(2, mapSize); + preparedStatement.setString(3, mapData); + + preparedStatement.execute(); + connection.close(); + } + + @Override + public LinkedHashMap<String, String> getMapNames() throws SQLException, IOException { + LinkedHashMap<String, String> mapNames = new LinkedHashMap<>(); + Connection connection = connect(); + String sql = "SELECT maps.map_id, maps.map_name FROM maps"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + ResultSet results = preparedStatement.executeQuery(); + 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 { + Connection connection = connect(); + String sql = "SELECT map_name FROM maps WHERE map_id = ?"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, ID); + + String map = preparedStatement.executeQuery().toString(); + connection.close(); + return map; + } + + @Override + public String getMapSizeByID(String ID) throws SQLException, IOException { + 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(); + + String mapSize = result.getString("map_size"); + connection.close(); + return mapSize; + } + + @Override + public ResultSet getStatistics(String playerName) throws SQLException, IOException { + Connection connection = connect(); + String sql = "SELECT * FROM players where player_name = ?"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, playerName); + ResultSet resultSet = preparedStatement.executeQuery(); + connection.close(); + return resultSet; + } + + @Override + public void updateMap(String mapID, String mapName, String mapData) throws SQLException, IOException { + 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(); + connection.close(); + } + + + @Override + public void updatePlayerName(String playerNameNew, String playerNameOld) throws SQLException, IOException { + 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(); + connection.close(); + } + + @Override + public void updatePlayerStatistics(String playerName, int gamesWon, int gamesLost, int kills, int deaths, int blocksDestroyed, int gameTime) throws SQLException, IOException { + 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(); + connection.close(); + } + + + @Override + public void deletePlayer(String playerName) throws IOException, SQLException { + Connection connection = connect(); + String sql = "DELETE FROM players WHERE player_name=?"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, playerName); + preparedStatement.execute(); + connection.close(); + } + + @Override + public void deleteMap(String mapID) throws SQLException, IOException { + Connection connection = connect(); + String sql = "DELETE * FROM maps WHERE map_id = ?"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, mapID); + preparedStatement.execute(); + connection.close(); + } + + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DataBase.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DataBase.java deleted file mode 100644 index e766e182..00000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DataBase.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.hdm_stuttgart.battlearena.Persistance; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -public class DataBase implements IDataBase{ - - private static final Logger log = LogManager.getLogger(DataBase.class); - -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java new file mode 100644 index 00000000..398258dc --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java @@ -0,0 +1,7 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + +public class MapData { +private static final Logger log = LogManager.getLogger(MapData.class); +} 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 new file mode 100644 index 00000000..32cfeee3 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java @@ -0,0 +1,7 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + +public class Persistence { +private static final Logger log = LogManager.getLogger(Persistence.class); +} 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 new file mode 100644 index 00000000..aa1493f3 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java @@ -0,0 +1,7 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; + +public class PlayerStatistics { +private static final Logger log = LogManager.getLogger(PlayerStatistics.class); +} diff --git a/src/main/resources/player/player.txt b/src/main/resources/player/player.txt new file mode 100644 index 00000000..e69de29b -- GitLab