MySQL Befehle aus Datenbank auslesen

NIckbrick

Mitglied
Guten Abend,
ich sitze aktuell an einem Projekt, bei dem ich Befehle in eine MySQL Datenbank speichere und diese später wieder aus der Datenbank auslese, um sie dann in eine Methode für einen Bot einzubauen.

Also ich habe eine Oberfläche in der man einen Befehl eingeben kann und was passiert wenn man ihn ausführt.
Bsp: !time --> Es ist aktuell [...] Uhr

Nun wird genau dies in die Datenbank gespeichert also so:
Befehl: !time
Antwort: Es ist aktuell [...] Uhr

Der Befehl und die Antwort müssen jetzt allerdings noch in eine Methode rein, damit der Bot diesen Befehl auch erkennt und nutzen kann.

Die Methode sieht so aus:
public void onMessage(String channel, String sender, String login, String hostname, String message){
if(message.equalsIgnoreCase("!time")){
sendMessage(channel, "Es ist aktuell [...] Uhr");
}
}

Und genau hier kommt nun mein Problem ich habe nämlich weder einen Plan wie ich aus der Datenbank die Daten bekomme, um alle Befehle als so ein extra Kasten einzufügen, noch ob dies überhaupt möglich ist. Deshalb würde ich mich freuen wenn einem von euch vielleicht was einfällt wie ich das hinbekomme.

Danke im vorraus
LG Nick
 

NIckbrick

Mitglied
Beschreib doch mal, was Du eigentlich machen willst. Mir ist z. B. nicht klar, warum drei Punkte in eckigen Klammern als Uhrzeit ausgegeben werden sollen.

Das hier [...] war lediglich nen Lückenfüller.
Aber wie ich oben schon versucht habe zu beschreiben möchte ich einen Befehl, den man vorher selber erstellt hat in diese Methode einfügen.
Bsp: if(message.equalsignorecase(BEFEHL){}
Und zudem auch die Antwort wenn man den Befehl eingegeben hat.
Bsp: if(message.equalsignorecase(BEFEHL){
sendMessage(ANTWORT);
}

BEFEHL und ANTWORT sollen aber nun aus der Datenbank geholt werden, statt das ich sie hier einfach einfüge.
 

Robat

Top Contributor
Hast du dich denn schon mal mit der Anbindung einer Datenbank in Java beschäftigt? Gibt es ja an sich genug Referenzen im Netz zu diesem Thema.
 

NIckbrick

Mitglied
Hast du dich denn schon mal mit der Anbindung einer Datenbank in Java beschäftigt? Gibt es ja an sich genug Referenzen im Netz zu diesem Thema.

Wie schon erwähnt habe ich mich schon damit beschäftigt und den einen Teil auch schon funktiontüchtig. Doch mir fehlt die Info bzw. die Idee wie ich nun die Befehle und Antworten einzeln aus der Datenbank bekomme, um sie dann in die Methode einzufügen.
 

Robat

Top Contributor
Ich würde einfach zu Beginn die Daten der Datenbank in eine Collection einlesen. So kannst du dann in der Collection schauen ob es den Befehl gibt und die passende Antwort zu dem Befehl senden/ausführen (je nach dem was die Antwort alles sein kann).
 

NIckbrick

Mitglied
Ich würde einfach zu Beginn die Daten der Datenbank in eine Collection einlesen. So kannst du dann in der Collection schauen ob es den Befehl gibt und die passende Antwort zu dem Befehl senden/ausführen (je nach dem was die Antwort alles sein kann).

Das klingt doch schonmal nach einem Plan. Das werde ich sofort ausprobieren danke dir schonmal.
 

Thallius

Top Contributor
Ich würde einfach zu Beginn die Daten der Datenbank in eine Collection einlesen. So kannst du dann in der Collection schauen ob es den Befehl gibt und die passende Antwort zu dem Befehl senden/ausführen (je nach dem was die Antwort alles sein kann).

Wozu dann denn eine Datenbank? Dann kannst du die Daten auch in einer Datei speichern. Wenn schon Datenbank, dann sollte man es auch richtig machen
 

mihe7

Top Contributor
Naja das worum es in diesem Thread eigentlich
Deine Frage bezog sich auf einen Post, wo die DB in Frage gestellt und auf die Möglichkeit verwiesen wurde, Dateien zu verwenden.

Also mal beides:

Dein Service möchte etwas mit folgender Schnittstelle benutzen:
Java:
public interface CommandRepository {
    Optional<String> getAnswer(String command);
}

Die kann z. B. mit Properties realisiert werden:
Java:
public class PropertiesCommandRepo implements CommandRepository {
    private final Properties props;
 
    public PropertiesCommandRepo(Properties props) {
        this.props = props;
    }

    public static PropertiesCommandRepo load(Reader reader) throws IOException {
        Properties props = new Properties();
        props.load(reader);
        return new PropertiesCommandRepo(props);
    }

    public String getAnswer(String command) {
        return Optional.ofNullable(props.getProperty(command));
    }
}

Ein solches Repository ließe sich wie folgt erzeugen:
Code:
    try(FileReader reader = new FileReader("pfad/zur/datei.properties")) {
        CommandRepository repo = PropertiesCommandRepo.load(reader);
    }

Natürlich funktioniert auch eine Implementierung via JDBC:

Java:
class JdbcCommandRepository implements CommandRepository {
    private final Connection conn;
    private static final String ANSWER_QUERY =
        "SELECT answer FROM commands WHERE command=?";

    public CommandRepository(Connection conn) {
        this.conn = conn;
    }

    @Override
    public Optional<String> getAnswer(String command) {
        try(PreparedStatement stmt = conn.prepareStatement(ANSWER_QUERY)) {
            stmt.setString(1, command);
            try(ResultSet rs = stmt.executeQuery()) {
                if (rs.next()) {
                    return Optional.of(rs.getString(1));
                }
                return Optional.empty();
            }
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }
}

Welche Datenbank-Verbindung Du verwendest, bleibt Dir überlassen:

Java:
Connection conn = DriverManager.getConnection(dbConnectUrl, username, password);
// irgendwann:
ConnectionRepository repo = new JdbcConnectionRepository(conn);
 

JuKu

Top Contributor
Naja das worum es in diesem Thread eigentlich geht wie ich einen Befehl und eine Antwort die in der Datenbank gespeichert werden dort wieder raus bekomme und in die onMessage Methode (meine 1. Aussage) einfüge.

Ich weiß nicht, ob ich dich richtig verstanden habe, deshalb eine kurze Information:
Du kannst keine Java Befehle in der Datenbank speichern und dann diesen Code zur Laufzeit einfügen und ausführen lassen. Das geht nur mit Magie (oder besser gesagt indem du zur Laufzeit Bytecode erzeugst - das solltest du aber lieber lassen).

Wenn du jetzt einfach nur die Formatierung speichern möchtest, dann kannst du eine Tabelle mit den Spalten "Befehl" und "formattedString" anlegen und dann den String nehmen, ersetzen und ausgeben.
Aber eine Datenbank kann an sich keine Logik (bzw. sollte nicht dazu missbraucht werden)!
Die Logik gehört in dein Programm, die Datenbank hält nur Daten.
In deinem Fall macht es in meinen Augen überhaupt gar keinen Sinn, da du ja nicht einfach auf eine Frage eine statische Antwort willst, sondern eine dynamische (z.B. die aktuelle Uhrzeit ausgeben). Und das musst du natürlich selbst programmieren, das kann nicht in eine Datenbank.
 

NIckbrick

Mitglied
Ich weiß nicht, ob ich dich richtig verstanden habe, deshalb eine kurze Information:
Du kannst keine Java Befehle in der Datenbank speichern und dann diesen Code zur Laufzeit einfügen und ausführen lassen. Das geht nur mit Magie (oder besser gesagt indem du zur Laufzeit Bytecode erzeugst - das solltest du aber lieber lassen).

Wenn du jetzt einfach nur die Formatierung speichern möchtest, dann kannst du eine Tabelle mit den Spalten "Befehl" und "formattedString" anlegen und dann den String nehmen, ersetzen und ausgeben.
Aber eine Datenbank kann an sich keine Logik (bzw. sollte nicht dazu missbraucht werden)!
Die Logik gehört in dein Programm, die Datenbank hält nur Daten.
In deinem Fall macht es in meinen Augen überhaupt gar keinen Sinn, da du ja nicht einfach auf eine Frage eine statische Antwort willst, sondern eine dynamische (z.B. die aktuelle Uhrzeit ausgeben). Und das musst du natürlich selbst programmieren, das kann nicht in eine Datenbank.

Ich glaube da haben wir aneinander vorbei geredet. Ich möchte keinen Java Befehl in die Datenbank speichern, sondern einen selbsterstellten Befehl den man über das Programm selber erstellt. Dieser soll aber logischerweise auch was bewirken in meinem Fall soll er einfach eine ebenfalls selbsterstellte Antwort in Form eines Strings zurückgeben. Zudem muss ich dies mit einer Datenbank machen damit jeder Bot zugriff auf diese Befehle bekommt
 

Thallius

Top Contributor
In deinem Fall macht es in meinen Augen überhaupt gar keinen Sinn, da du ja nicht einfach auf eine Frage eine statische Antwort willst, sondern eine dynamische (z.B. die aktuelle Uhrzeit ausgeben). Und das musst du natürlich selbst programmieren, das kann nicht in eine Datenbank.

So nicht richtig. Er kann ja magic Tokens in die Strings der Antworten einbauen. Also in dem Fall mit der Uhrzeit speichere ich in die Tabelle mit den späten Command und Answer die Strings

Time und
Es ist @@@time@@@ Uhr

Nun wird einfach der String um Befehl Time aus der dB gelesen und dann werden die Antwort Strings durch einen Pariser geschickt der die magic Tokens durch den richtigen Inhalt ersetzt. Bei Time eben durch die aktuelle Uhrzeit.
 

JuKu

Top Contributor
@Thallius Ja, klar! Mit Platzhaltern kann er natürlich arbeiten, aber dazu muss das Programm diese Platzhalter selbst zur Laufzeit ersetzen. Also Code muss er trotzdem schreiben, eben wie du sagst den Parser.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java und SQL-Befehle Datenbankprogrammierung 6
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
K SQL Befehle über java Oberfläche Datenbankprogrammierung 4
C H2 H2 Befehle Datenbankprogrammierung 3
A SQL-Befehle lassen sich nicht ausführen Datenbankprogrammierung 6
Meldanor Eingaben auf SQL Befehle überprüfen Datenbankprogrammierung 13
N Welche Befehle? Datenbankprogrammierung 4
C SQL Befehle ausführen und deren Ergebnisse verarbeiten Datenbankprogrammierung 3
M SQL-Befehle werden manchmal nicht komplett übermittelt Datenbankprogrammierung 5
V "Spezielle" SQL Befehle Datenbankprogrammierung 3
C hsqldb Befehle in Java Datenbankprogrammierung 19
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12
@SupressWarnings() Eure bevorzugte Datenbank-Library Datenbankprogrammierung 9
C datenbank verbindung config Datenbankprogrammierung 23
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
U MySQL Aus Servlet in Datenbank schreiben Datenbankprogrammierung 4
H Datenbank Export mit Java Datenbankprogrammierung 3
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S SQL-Statement Datenbank Zeitbereich durchsuchen Datenbankprogrammierung 2
L Messenger App - Wie am besten auf Datenbank zugreifen? Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29

Ähnliche Java Themen

Neue Themen


Oben