SQLite Werte aus zwei Tabellen zusammenführen

Ataria

Mitglied
Hallo zusammen,

ich bin neu bei der Programmierung mit Java und stecke seit Tagen an einem Problem fest, das ich einfach nicht gelöst bekomme... ich hoffe, ihr könnt mir hier helfen :)
Zunächst erst einmal der Code:

Java:
else if (ereignis.getMessage().getContentRaw().startsWith(".ha")) {

    String name = ereignis.getAuthor().getName();

    helden = ereignis.getMessage().getContentRaw().toLowerCase().substring(4);

    String helden2 = ereignis.getMessage().getContentRaw().toLowerCase().substring(5);

    String[] splitstrength = helden2.trim().split("\\s*[^0-9]+\\s*");

    String[] splithelden = helden.trim().split("\\s*[0-9]+\\s*");

    Datenbank.onUpdate("CREATE TABLE IF NOT EXISTS held" + name + "(id INTEGER NOT NULL, memberid INTEGER, hero VARCHAR, strength INTEGER)");

    Datenbank.onUpdate("CREATE TABLE IF NOT EXISTS stärke" + name + "(id INTEGER NOT NULL, strength)");


    for (int i = 0; i < splithelden.length; i++) {

        System.out.println(splithelden[i]);

        Datenbank.onUpdate("INSERT INTO held" + name + "(id, memberid, hero, strength) VALUES(" + i + ", " + user + ", '" + splithelden[i] + "', '0')");


    }

    for (int i = 1; i < splitstrength.length; i++){

        System.out.println(splitstrength[i]);

        Datenbank.onUpdate("INSERT INTO held" + name + "(id, memberid, hero, strength) VALUES(" + i + ", " + user + ", 'nichts', '" + splitstrength[i] + "')");

    }

    try {

        ResultSet ergebnis = Datenbank.onQuery("SELECT strength FROM stärke" + name +"");

        String ergStr = "";

        while (ergebnis.next()) {

            ergStr = ergStr.concat("\n" + ergebnis.getString("strength") + "\n");


        }

        System.out.println(ergStr);

        String[] erg = ergStr.trim().split("\\s*[^0-9]+\\s*");

        for (int i = 0; i < erg.length; i++){

            System.out.println(erg[i]);

            String update = "UPDATE held" + name + " SET strength= '" + erg[i] + "'";

            File file = new File("datenbank.db");

            String url = "jdbc:sqlite:" + file.getPath();

            Connection conn = null;

            Statement stmt = null;

            conn = DriverManager.getConnection(url);

            stmt = conn.createStatement();

            stmt.executeUpdate(update);}


    } catch (SQLException e) {

        e.printStackTrace();; }

Ich arbeite quasi an einem Discord Bot, der für ein Spiel über ein paar Befehle Daten der einzelnen Mitglieder sammeln und entsprechend in der Datenbank speichern soll. Ich bin nun so weit, dass er zwar den eingegeben Text versteht und das auch alles schön einzeln in die Tabellen einträgt, aber wenn ich nun die "strength" aus der Tabelle "stärke" in die Spalte "strength" aus der Tabelle "helden" überspielen will, dann macht er bei diesem Code folgendes: Er spielt nur die letzte der eingegeben Stärken zurück. Beispiel: A 123 B 456 C 789 - er trägt jetzt A B C in die Zeilen der Tabelle 1 ein, 123 456 789 in die Zeilen der Tabelle 2. Schön und gut. Aber nun nimmt er bei meinem Code bei der Zusammenführung nur 789 und trägt das in jede Zeile der Tabelle 1 in die Spalte ein... Also die richtige Spalte erwischt er, aber gibt eben immer nur den letzten Wert wiederholt dort aus... Könnt ihr mir hier helfen, wie wirklich Wert 1 in Zeile 1, Wert 2 in Zeile 2 usw. übertragen wird? Das wäre klasse :) Bin echt am verzweifeln...
 
Y

yfons123

Gast
Ich werfe mal den Begriff "prepared statement" in den raum

das ist die Sichere Art SQL statements in Programmen auszuführen, das wird jetzt hier nicht unbedingt benötigt aber es wäre ein Thema was man sich mal anschauen könnte

bei echten datenbank ist das eine Grund vorraussetzung um Fehler zu vermeiden
 

Oneixee5

Top Contributor
Man sieht das du Anfänger bist, trotzdem muss ich kritisch bemerken, das der Quellcode wirklich gruselig ist. "prepared statement" sind das kleinste Problem. Ich behaupte das Programm funktioniert so nicht. Wenn du zum 1. mal da lang kommst, liefert
"SELECT strength FROM stärke" + name +"")
keine Werte, weil hier kein Insert für die Tabelle existiert. Noch schlimmer wir es, wenn du zum 2. mal da lang kommst - es werden bedenkenlos Inserts ausgeführt, ohne mal zu schauen ob es bereits ein Datensatz mit der ID existiert. Eine ID sollte, schon laut Name, eindeutig/einmalig sein, nicht einfach ein Zähler, der immer wieder benutzt wird.
Richtig krass wird es in der letzten Schleife, bei jedem Durchgang wird die Datenbank neu geöffnet aber nie geschlossen.
Du solltest den Ablauf für dich erst mal irgendwo mit Stift und Papier skizzieren und dann eine vernünftige nachvollziehbare Programmstruktur mit kleinen überschaubaren Methoden entwickeln und später erst den Programmcode hinzufügen.
Wie ich das sehe ist auch nicht für jeden Namen eine eigene DB-Tabelle notwendig, Name kann eine Spalte sein, auf welche die Abfragen eingeschränkt werden. Dann ist es auch nicht notwendig die SQL-Befehle als String zusammenzusetzen - Diese Vorgehen ist eine grobe Sicherheitslücke und etwas, was man niemals tun sollte.
 
Y

yfons123

Gast

das programm kann sich sqlite datenbanken anschauen und daten einfügen

das ist ansich ein SQL database manager mehr oder weniger, das sollte/könnte dir helfne um den aktuellen stand anzuschauen und zu sehen was da im moment drin steht
so als hilfe tool
 

Ataria

Mitglied
Man sieht das du Anfänger bist, trotzdem muss ich kritisch bemerken, das der Quellcode wirklich gruselig ist. "prepared statement" sind das kleinste Problem. Ich behaupte das Programm funktioniert so nicht. Wenn du zum 1. mal da lang kommst, liefert
"SELECT strength FROM stärke" + name +"")
keine Werte, weil hier kein Insert für die Tabelle existiert. Noch schlimmer wir es, wenn du zum 2. mal da lang kommst - es werden bedenkenlos Inserts ausgeführt, ohne mal zu schauen ob es bereits ein Datensatz mit der ID existiert. Eine ID sollte, schon laut Name, eindeutig/einmalig sein, nicht einfach ein Zähler, der immer wieder benutzt wird.
Richtig krass wird es in der letzten Schleife, bei jedem Durchgang wird die Datenbank neu geöffnet aber nie geschlossen.
Du solltest den Ablauf für dich erst mal irgendwo mit Stift und Papier skizzieren und dann eine vernünftige nachvollziehbare Programmstruktur mit kleinen überschaubaren Methoden entwickeln und später erst den Programmcode hinzufügen.
Wie ich das sehe ist auch nicht für jeden Namen eine eigene DB-Tabelle notwendig, Name kann eine Spalte sein, auf welche die Abfragen eingeschränkt werden. Dann ist es auch nicht notwendig die SQL-Befehle als String zusammenzusetzen - Diese Vorgehen ist eine grobe Sicherheitslücke und etwas, was man niemals tun sollte.
Hi, danke für die Antwort :) Das Programm funktioniert, wie gesagt, schon und es gibt eine INSERT Funktion für die Tabelle. Also Werte hat er und er fügt diese auch ein (es ist ja nur ein Ausschnitt des Codes, davor kommen noch andere Dinge, nur hier hängt es eben bei diesem Command). Nur beim Zusammenführen beider Tabellen haut es wie gesagt nicht hin, weil er dann immer nur den letzten Wert der Tabelle nimmt und ihn in jede Zeile der anderen Tabelle einfügt anstatt jede einzelne Zeile in die andere Tabelle zu setzen... Da liegt eigentlich mein einziges Problem im Moment.
 

Ataria

Mitglied

das programm kann sich sqlite datenbanken anschauen und daten einfügen

das ist ansich ein SQL database manager mehr oder weniger, das sollte/könnte dir helfne um den aktuellen stand anzuschauen und zu sehen was da im moment drin steht
so als hilfe tool
Danke, das verwende ich auch, um nachzuschauen :) Daher weiß ich, dass er immer den jeweils letzten Wert der Tabelle nimmt und ihn in die andere Tabelle einfügt, statt jeden Wert in die richtige Zeile zu schreiben... Wenn in der einen Tabelle jetzt stehen würde:
1. Zeile: A
2. Zeile: B
3. Zeile: C

und in der zweiten Tabelle:
1. Zeile: 1
2. Zeile: 2
3. Zeile: 3

schreibt er dann leider nicht in die erste Tabelle jeweils:
A 1
B 2
C 3

sondern er schreibt in die Spalte daneben einfach immer nur die 3, also
A 3
B 3
C 3

und ich weiß einfach nicht warum...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Zwei Spalten und Ihre Werte vergleichen Datenbankprogrammierung 3
J Mehrere WHERE Werte benutzen Datenbankprogrammierung 2
P Null Werte bei der Normalisierung Datenbankprogrammierung 2
J keine Werte vom PHP Datenbankprogrammierung 3
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
E Wie kann man in DB2 TIMESTAMP Werte hinzufügen? Datenbankprogrammierung 2
OnDemand SQL Query Anzahl der Werte Datenbankprogrammierung 8
ruutaiokwu sql server werte swappen beim update-vorgang mit unique-constraints..? Datenbankprogrammierung 2
S MySQL Nach wiederholtem Update falsche Werte (im Speicher?) Datenbankprogrammierung 1
L Werte in Datei speichern Datenbankprogrammierung 16
H MySQL Werte eines Datensatzes in einen anderen kopieren Datenbankprogrammierung 2
J Access Datenbank mit JAVA erstellen - boolean Werte Datenbankprogrammierung 4
E Werte auslesen Datenbankprogrammierung 3
D Alle Werte aus DB auslesen und in Chart darstellen Datenbankprogrammierung 6
pg1337 PostgreSQL Werte auf Eingabe speichern Datenbankprogrammierung 23
Z MySQL werte von formular speichern Datenbankprogrammierung 3
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
E Update DB; Werte aus Feldern übernehmen Datenbankprogrammierung 5
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
Landei Mehre Werte für einen Prepared-Statement_Parameter übergeben? Datenbankprogrammierung 3
G Einheitliches Casting für Decimal und Integer-Werte Datenbankprogrammierung 5
G Werte in DB multiplizieren Datenbankprogrammierung 5
A JList nimmt nicht alle Werte aus der DB auf Datenbankprogrammierung 3
Y Hibernate - Werte aus 2 Tabellen laden Datenbankprogrammierung 29
G Hilfe: Werte sind alle x2 (oder mehr) nach JOIN Datenbankprogrammierung 13
F JDBC Abfrage Werte auslesen Datenbankprogrammierung 2
E Vergleichen von datetime mit GregorianCalender-Werte Datenbankprogrammierung 6
K [hibernate] show_sql: Werte der Parameter anzeigen Datenbankprogrammierung 3
P MYSQL werte aus liste auslesen und anderen damit updaten Datenbankprogrammierung 4
G numerische werte Datenbankprogrammierung 6
V Werte über Konsole in Datenbank schreiben Datenbankprogrammierung 2
Z Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX) Datenbankprogrammierung 21
C zwei Strings vergleichen Datenbankprogrammierung 13
ralfb1105 Oracle Zwei ojdbc Driver in einer Applikation? Datenbankprogrammierung 13
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
M SQLite Zwei Datenbanken synchronisieren Datenbankprogrammierung 8
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
AssELAss Oracle Wildcard-Suche über zwei Felder Datenbankprogrammierung 5
M Oracle XA Connect auf zwei Datenbankinstanzen | fertiges Tool verfügbar? Datenbankprogrammierung 0
K Zwei Datenbanken miteinander auf Unterschiede vergleichen Datenbankprogrammierung 2
C Entities zwischen zwei PersistenceUnits tauschen Datenbankprogrammierung 5
M MySQL größere von zwei Zahlen in Update Statement Datenbankprogrammierung 2
Consuelo Verbinden von zwei Tabellen, foreign key Datenbankprogrammierung 4
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
D zwei gleichzeitige Connections Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
P Insert into mit zwei Datenbanken Datenbankprogrammierung 3
G Inhalt eine Clob Feldes zw. zwei DB's kopieren Datenbankprogrammierung 2
W Zwei Fragen über JDBC und MySQL Datenbankprogrammierung 2
N Abfrage über zwei Datenbanken Datenbankprogrammierung 9
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
I H2 - GUI Tool.... sehe aber keine Tabellen Datenbankprogrammierung 2
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Kirby.exe Tabellen Zeilen combinen und splitten Datenbankprogrammierung 3
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
M Sql Tabellen erstellen Datenbankprogrammierung 3
F Tabellen automatisch erstellen wenn sie nicht existieren Datenbankprogrammierung 6
C Mapping mit Annotations von 2 Tabellen Datenbankprogrammierung 22
L Join zweier Tabellen in SQL Datenbankprogrammierung 2
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
H Brauche Hilfe beim Mappen von 3 Tabellen a 1:n mit hbm.xml. Datenbankprogrammierung 34
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
feinperligekohlensaeure MySQL Dynamische Tabellen. Wie kann man es besser machen? Datenbankprogrammierung 3
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
D Count(*) auf 2 Tabellen anwenden Datenbankprogrammierung 7
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
V SQLite 2 Tabellen vergleichen und nur Unterschiedliche Sätze rausgeben. Datenbankprogrammierung 31
F Tabellen verbinden Datenbankprogrammierung 13
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
U Kann die Tabellen nicht finden Datenbankprogrammierung 0
D umschalten zwischen verschiedene Tabellen Datenbankprogrammierung 1
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
E Kann man, wenn man in DB2 Tabellen erstellt hat für dessen auch einen Command-File erstellen? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
T Tabellen von nicht mehr vorhandenen Entities werden generiert Datenbankprogrammierung 0
J MySQL Workbench Tabellen werden verschoben Datenbankprogrammierung 1
M MySQL Tabellen dynamisch erstellen Datenbankprogrammierung 12
T Ähnliche Wrapperklassen + DB-Tabellen Datenbankprogrammierung 1
K HSQLDB Einzelne Tabellen abfragen? Datenbankprogrammierung 4
T Tabellen Alias Datenbankprogrammierung 7
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
J Tabellen in Tabellen finden Datenbankprogrammierung 4
S versionierte Tabellen Datenbankprogrammierung 2
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
I Was ist besser: Tabellen oder Spalten Datenbankprogrammierung 1
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
C SQL-Statement SELECT über 3 Tabellen Datenbankprogrammierung 5
G 2 Tabellen und ein spezieller Eintrag Datenbankprogrammierung 2
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
T 2 Tabellen aus 2 Datenbanken miteinander vergleichen Datenbankprogrammierung 6
I MySQL Vergleich über mehrere Tabellen! Join? Datenbankprogrammierung 6
R PostgreSQL Tabellen hinzufügen, falls nicht vorhanden Datenbankprogrammierung 3

Ähnliche Java Themen


Oben