wordle/Query.java

139 lines
4.8 KiB
Java
Raw Permalink Normal View History

2022-03-25 19:06:43 +01:00
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Random;
public class Query {
2022-03-03 11:20:18 +01:00
DatabaseConnector db;
2022-03-03 11:20:18 +01:00
Query() {
db = new DatabaseConnector("", 0, "wordle.db", "", "");
}
/**
* Speichert die Daten des Users aus der Datenbank auf dem User-Objekt
2022-03-24 11:36:02 +01:00
*
* @param user
*/
2022-03-03 11:20:18 +01:00
public void pullStats(User user) {
String[][] r;
db.executeStatement("SELECT * FROM Stats INNER JOIN won_on_n ON Stats.ID = won_on_n.Stats_ID "
+ "INNER JOIN last_Game ON Stats.ID = last_Game.Stats_ID WHERE user_username = '" + user.getUsername()
+ "'");
2022-03-03 11:20:18 +01:00
r = db.getCurrentQueryResult().getData();
if (r != null && r.length != 0 && r[0].length == 22) {
2022-03-25 19:06:43 +01:00
user.setCurrentStreak(Integer.parseInt(r[0][2]));
user.setMaxStreak(Integer.parseInt(r[0][3]));
user.setWinPercentage(Float.parseFloat(r[0][4]));
user.setTimesPlayed(Integer.parseInt(r[0][5]));
user.setLastDayWOTDPlayed(Integer.parseInt(r[0][6]));
2022-03-03 13:27:19 +01:00
2022-03-25 19:06:43 +01:00
for (int i = 0; i < 6; i++) {
try {
user.setWonInTurnIndex(Integer.parseInt(r[0][8 + i]), i);
} catch (NumberFormatException e) {
user.setWonInTurnIndex(0, i);
}
}
2022-03-25 19:06:43 +01:00
for (int i = 0; i < 5; i++) {
user.getGame().setGuessesIndex(r[0][15 + i], i);
2022-03-25 19:06:43 +01:00
}
user.getGame().setWord(r[0][20]);
try {
user.getGame().setIsWOTD(Integer.parseInt(r[0][21]));
} catch (NumberFormatException e) {
user.getGame().setIsWOTD(0);
}
2022-03-25 19:06:43 +01:00
} else {
System.out.println("Fehler beim Abfragen der Daten f<>r den User " + user.getUsername());
}
2022-03-03 11:20:18 +01:00
}
/**
* Pusht die Daten des Users im Parameter auf die Datenbank
*
* @param user
*/
2022-03-03 11:20:18 +01:00
public void pushStats(User user) {
2022-03-25 19:06:43 +01:00
db.executeStatement("UPDATE Stats SET current_streak = " + user.getCurrentStreak() + ", max_streak = "
+ user.getMaxStreak() + ", win_percentage = " + user.getWinPercentage() + ", times_played = "
+ user.getTimesPlayed() + ", last_day_WOTD_finished = " + user.getLastDayWOTDPlayed()
+ " WHERE user_username LIKE '" + user.getUsername() + "'");
db.executeStatement("UPDATE won_on_n SET won_on_1 = " + user.getWonInTurnIndex(0) + ", won_on_2 = "
+ user.getWonInTurnIndex(1) + ", won_on_3 = " + user.getWonInTurnIndex(2) + ", won_on_4 = "
+ user.getWonInTurnIndex(3) + ", won_on_5 = " + user.getWonInTurnIndex(4) + ", won_on_6 = "
+ user.getWonInTurnIndex(5)
+ " WHERE Stats_ID IN( SELECT user_username FROM Stats WHERE user_username LIKE '" + user.getUsername()
+ "')");
db.executeStatement("UPDATE last_Game SET last_guess_1 = " + user.getGame().getGuessIndex(0)
+ ", last_guess_2 = " + user.getGame().getGuessIndex(1) + ", last_guess_3 = "
+ user.getGame().getGuessIndex(2) + ", last_guess_4 = " + user.getGame().getGuessIndex(3)
+ ", last_guess_5 = " + user.getGame().getGuessIndex(4) + ", word = " + user.getGame().getWord()
+ ", isWOTD = " + user.getGame().getIsWOTD()
+ " WHERE Stats_ID IN( SELECT ID FROM Stats WHERE user_username LIKE '" + user.getUsername() + "')");
2022-03-03 11:20:18 +01:00
}
/**
* <EFBFBD>berpr<EFBFBD>ft ob es den Username und das Passwort in der Datenbank gibt und
* gibt den Erfolg als Boolean zur<EFBFBD>ck
*
* @param username
* @param password
2022-03-24 11:36:02 +01:00
* @return Boolean true = login erfolgreich false = login fehlgeschlagen
*/
2022-03-03 11:20:18 +01:00
public boolean checkLogin(String username, String password) {
2022-03-24 11:36:02 +01:00
// TODO: testen und vllt korrigieren
db.executeStatement("SELECT 1 FROM user WHERE username LIKE \"" + username + "\" " + "AND passwort LIKE \""
+ password + "\"");
2022-03-24 11:36:02 +01:00
QueryResult r = db.getCurrentQueryResult();
if (r != null && r.getRowCount() == 1) {
2022-03-24 11:36:02 +01:00
return true;
} else {
return false;
}
2022-03-03 11:20:18 +01:00
}
/**
2022-03-24 11:36:02 +01:00
* Gibt ein Zuf<EFBFBD>lliges Wort aus der Datenbank zur<EFBFBD>ck
*
* @return Ein Word als String
*/
2022-03-03 11:20:18 +01:00
public String getWord() {
2022-03-25 19:06:43 +01:00
db.executeStatement("SELECT word FROM words ORDER BY random() LIMIT 1");
String[][] s = db.getCurrentQueryResult().getData();
return s[0][0];
}
/**
2022-03-24 11:36:02 +01:00
* Gibt das Wordle des Tages, welches aus der Datenbank stammt, zur<EFBFBD>ck. Ergibt
* pro Tag immer das gleiche Wordle, aber trotzdem f<EFBFBD>r jeden neuen Tag ein
* anderes Wort
*
* @return Das Wort als String
*/
public String getWOTD() {
2022-03-25 19:06:43 +01:00
db.executeStatement("SELECT COUNT(*) FROM words");
String[][] r = db.getCurrentQueryResult().getData();
2022-03-25 19:06:43 +01:00
int words = Integer.parseInt(r[0][0]);
Random random = new Random();
random.setSeed((int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now()));
int randNumber = random.nextInt() % words;
db.executeStatement("SELECT word FROM words WHERE ID LIKE '" + randNumber + "'");
r = db.getCurrentQueryResult().getData();
return r[0][0];
2022-03-03 11:20:18 +01:00
}
/**
2022-03-24 11:36:02 +01:00
* Pr<EFBFBD>ft ob das Wort in der Datenbank vorhanden ist
*
* @param word ,ein String mit dem Wort
* @return Boolean
*/
public boolean checkWord(String word) {
2022-03-25 19:06:43 +01:00
db.executeStatement("SELECT 1 FROM words WHERE word LIKE '" + word + "'");
String[][] r = db.getCurrentQueryResult().getData();
return r.length != 0;
}
}