HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative?

DefconDev

Bekanntes Mitglied
Hallo zusammen,

ich müsste ein Array in ein INSERT INTO einfügen über eine For-Schleife mit der selben ID.

Java:
for(int i=0,j=1;i<spielerArray.length;j++,i++){
	
updateSpielerTable = "INSERT INTO \"Match\" (\"Datum\", \"Karte\", \"Anzahl Spieler\", \"Team A winloss\", 
\"Team B winloss\", \"Spieler "+j+"\", \"Nation "+j+"\" ) "

+ "VALUES (\'"+date+"\',\'"+spielerArray[i].getChosenMap_Spieler()+"\',\'"+spielerArray.length+"\',\'"+Spieler.isWinTeamA()+"\',\'"+Spieler.isWinTeamB()+"\'"
+ ",\'"+spielerArray[i].getSpielerName()+"\',\'"+spielerArray[i].getChosenNation_Spieler()+"')";
									
					
statement.execute(updateSpielerTable);
				
}

Das Array ist nicht immer gleich groß. Sobald die For Schleife durchläuft, wird logischerweise immer eine neue Zeile mit neuer ID vergeben(Auto increment). Also in dem Fall wenn das Array 8 groß ist, werden 8 Zeilen erschaffen mit der ID 1-8. Das möchte ich aber nicht, sondern viel mehr dass das komplette Array unter der selben ID gespeichert wird.

Ich hatte nun die Idee, erst mal ohne Schleife ein INSERT INTO Statement ausführe, und dann die Zeile komplett mit null beschreibe und dann UPDATE die selbe Zeile mit Daten füllen.

Gibt es irgend etwas eleganteres?
 
Ich verstehe noch das Problem nicht.

Offensichtlich ist ID ein Autoincrement. Ergo wäre alles sowieso nicht in einer ID zu speichern.

Das Problem ist, dass hier vermutlich ein Modelierungsfehler vorliegt. - Die Relation "Match" darf keine Spielerinformationen enthalten, weil ein Match pot. aus verschiedenen Spielern besteht: Es wäre also eine 1:N relation.
 
Ja, es sollen unter einer ID so ziemlich alles gesammelt werden was für mich nützlich ist, anzahl der Spieler, welche Karte gespielt wurde, welche Spieler überhaupt teilgenommen haben.

Wenn du sagst es liegt ein Modelierungsfehler vor, inwiefern muss ich dann umdenken? Das Autoincrement kann ich auch entfernen, das spielt für mein Vorgehen keine Rolle. Habe das nur aus Gründen des Komfort so gewählt. Die Tabelle selber ist mit keiner anderen verknüpft.
 
Habe ich geschrieben.

1. Neue Relation "Match_spieler" mit spieler_id, match_id

Damit verknüpfst du einen vorhandenn Spieler zu einem Match

2. Anzahl spieler ergibst sich aus count(*) from match_spieler where match_id = x

3. Die Felder zu den Spieler natürlich aus match entfernen. Auch nationalität.

4. Eigentlich müsste es eine Relation "SPieler" geben, wo die spieler eben enthalten sind.
 
Ich kann mich gerade nicht in dein Konzept reindenken.

Vielleicht muss ich etwas ausholen.

Die Spieler werden zufällig zusammengewürfelt in zwei Teams, dann wird eingetragen, welches Team gewonnen hat, das findet alles in einer DefaultTable statt. Von dort aus will ich dann das extra eintragen in eine Datenbanktabelle.

Ich will dann anhand der Match id feststellen wer im ersten Spiel dabei war und gewonnen hat, wer zb. im Spiel 10 gewonnen und verloren hatte und welche Nationen dabei waren.
 
Was ich sagen will, ich brauche eigentlich keine Verknüpfung mit anderen Tabellen. Ich brauche nur ne simple Ablage wo ich mal reinschauen kann wie unter welche Match id die Spiele stattgefunden haben.
 
Doch, Du brauchst eine zweite Tabelle mit den mindestens Spalten "Spieler" und "MatchId". In diese trägst für jeden Spieler der das Match mitgemacht hast einen Eintrag ein. Nun kannst du alle Spieler zu einer MatchID heruasfinden.

Wie JM bereits schrieb. Die Spieler haben in deiner Tabelle nichts verloren. Deine Tabelle sollte auch besser Match-Tabelle heissen, denn sie enthält keine Daten zu Spielern sondern zum Match.

Gruß

Claus
 
Zuletzt bearbeitet:
Ich kann mich gerade nicht in dein Konzept reindenken.

Dazu braucht es auch Grundlagen (1...3) Kapitel Relationenalgebra. Du musst wisssen, wie man eine 1:N, M:N oder 1:1 Beziehung in Relationalen Datenbanken ablegt.

Ansonsten steht ja schon alles hier. Und simpler geht es nicht ;D
 

Zurück
Oben