Java und SQL

C

ClaudiJava

Hallo liebe Java-Freunde,

ich versuche gerade Input in meine Datenbank hinzukriegen. Ich habe es auch hingekriegt, allerdings funktioniert es nicht so ganz wie ich es moechte.

Also beispielsweise:
arrayListSpaltenName = ersterSpaltenname, zweiterSpaltenname, dritterSpaltenname

arrayListSpaltenWerte = inhaltzuersterSpaltenname, inhaltzuzweiterSpaltenname, inhaltzudritterSpaltenname

da ist mein Problem, dass die Reihenfolge nicht ganz stimmt und somit die Eintraege vom Inhalt auch mal in anderen Spalten landen kann. Gibt es irgendwie ein SQL Statement wo ich ganz genau sagen kann, ersterSpaltenname soll den Inhalt inhaltzuersterSpaltenname bekommen?
 
Zuletzt bearbeitet von einem Moderator:
1) Da sich dieser Thread immer noch mit dem Problem aus dem anderen Thread beschäftigt bzw. es damit zusammenhängt hättest du diese Frage eingentlich in dem anderen Thread stellen sollen und nicht einen neuen aufmachen. Versuche bitte in Zukunft zusammenhängende Probleme auch in einem Thread zusammen zu lassen.
2) Die Form ist schon richtig
SQL:
INSERT INTO `table_name` (`ersterSpaltenName`, `zweiterSpaltenName`) VALUES (`inhaltErsteSpalte`, `inhaltZweiteSpalte`);
In der ersten Klammer legst du die Reihenfolge der Values fest. Wenn du also so schreibst wie ich dann kommt die erste Value auch in die erste Spalte ... egal wie der Name ist und welche Reihenfolge in der DB ist ... es geht nach der von dir festgelegten Reihenfolge.
Wenn du jetzt die beiden Spaltennamen vertauschst , die Reihenfolge der Values aber so lässt wandern beide in die jeweils andere Spalte.
Näheres dazu findest sich z.B. in der Doc von MySQL die sehr ausführlich und auch auf Deutsch ist.
 
Ja aber die Reihenfolge vertauscht sich in der Hashliste die ich uebergebe und meine Frage ist explizit dies anzugeben, dass ich diese Reihenfolge möchte.

Gibt es da kein Statement, wo ich das explizit angeben kann********
 
Die Frage ist : WAS vertauscht sich WO ?
Die Keys ? Die Values ? Du musst uns schon mal genau sagen was eben NICHT so funktioniert wie du es willst.
Das Statement mit der du bestimmen kannst welche Value in welche Spalte kommt habe ich dir oben gepostet. Wenn jetzt allerdings die Daten innerhalb der List diesem Schema nicht folgen sondern wild durch ein ander sind ... wäre erstmal zu klären ob du die Werte entsprechend ihren Keys überhaupt richtig in die List aufnimmst.
Weil wenn die List an sich dem Aufbau des Statements ohne abweichung folgt brauchst du nur eine for()-Schleife ... das deine List jedoch diese Bedingung erfüllt musst du selbst kontrollieren ... das hat mit SQL nichts zu tun.

Also noch mal : WAS genau funktioniert NICHT so wie es soll ?
 
Ok das Problem ist, dass ich eine Set<String> arrayListSpaltenName = new HashSet<String>() habe und wenn ich Elemente in arrayListSpaltenName hinzufüge und danach lösche, dann vertauscht sich die Reihenfolge der Elemente innerhalb der arrayListSpaltenName . Ich habe HashSet ausgesucht, weil diese Methode doppelte Eintraege vermeidet, aber wenn man Elemente aus dieser Set loescht, dann vertauscht sich allerdings auch die Reihenfolge der Elemente und dies will ich verhindern, allerdings weiss ich nicht wie.....
 
Also kurz : die Reihenfolge der Datensätze wird verändert.
Wobei ich erlich gesagt nicht weis warum du für die Spaltennamen ein Set verwendest. In der Regel macht man das nur wenn man multi-demensionale Objekte hat bei denen der Wert mit verknüpft ist. Ansonsten kannst du einfach in dein Query die Spaltennamen eintragen. Oder sind es wirklich so extrem viele das es eine iteration rechfertigen würde ?
 
ok ich habe einen alten Beitrag hier gelesen und es wird LinkedHashSet empfohlen :)

Ok danke Dir, aber ich Query würde bei meinem Fall nicht genügend sein. Aber ich versuche es jetzt mal mit einem LinkedHashSet.

aber ich *denke* Query
 
Zuletzt bearbeitet von einem Moderator:
Ähm ... HALLO ?
Schon mal Regel gelesen ?
Und mal GENAU auf den Post gesehen ?

ES GIBT EINE BEARBEITEN-FUNKTION !

Nutze diese bitte in Zukunft ...

PS : Mod wird über zusammenführung informiert.


btw : warum sollte es nicht genügen die SPALTENnamen dierekt in die Query zu schreiben ? Willst du mir etwa sagen das du eine Tabelle mit mehreren 100 Spalten hast ? Oder wie genau stellst du dir die Verwendung einer Liste für die Spaltennamen vor ?
Ich denke es wäre mal etwas Source sinnvoll um überhaupt zu verstehen was genau du da machst. Weil aus deinen Erklärungsversuchen bin ich nicht schlau geworden.
 
Zuletzt bearbeitet von einem Moderator:
Das würde ja heißen das du lediglich ein Query hast in den du dann lustig alles einsetzt. So meinte ich das aber nicht. Man könnte zumindest für jede einzelne Tabelle eine eigene Query schreiben ... was das ganze schon mal übersichtlicher machen würde. Wenn man dann die Tabellen noch halbwegs logisch aufbaut kann man dort die Spaltenanzahl ebenfalls senken ... so das es dann sehr wohl Sinn macht z.B. für Tabelle xyz eine Query zu schreiben in der die Spaltennamen schon drin stehen und man nur noch dafür sorgen muss das auch in Spalte5 nur Werte kommen die da auch rein gehören. Das kann man ebenfalls sehr einfach erreichen in dem man dann für jede Spalte eine eigene List oder ein eigenes Set nutzt.

Und ich meinte auch nicht uns hier mit 6k Zeilen Code zu bomben sondern lediglich mal den Abschnitt in dem die DB-Kommunikation abläuft.

Kann es sein das du nicht nur hier im Forum neu bist sondern auch generell was das Thema Programmieren und logische Ordnung von Daten angeht ? *Geschweige denn OOP ?*

PS : du hast den EDIT-Link schon wieder missachtet.
 
Hey,

mir ist zwar nicht ganz schlüssig was du eigentlich willst aber vll hilft dir ja folgendes weiter:


Java:
		String sqlInsert = "INSERT INTO %s (%s) values (%s)";
		
		Map<String,Object> valuesToInsert = new HashMap<String, Object>();
		
		valuesToInsert.put("name", "James");
		valuesToInsert.put("nachname", "Hetfield");
		
		StringBuilder sbWildcards = new StringBuilder();
		StringBuilder sbColumns = new StringBuilder();
		
		for(String key : valuesToInsert.keySet())
		{
			if(sbWildcards.length()>0)
			{
				sbWildcards.append(",");
				sbColumns.append(",");
			}
			sbWildcards.append("?");
			sbColumns.append(key);
		}
		
		sqlInsert=String.format(sqlInsert, "PERSON",sbColumns.toString(),sbWildcards.toString());
		System.out.println(sqlInsert);

Ausgabe: INSERT INTO PERSON (nachname,vorname) values (?,?)


so baue ich jedenfalls meine PreparedStatenebts zusammen.

Gruß

Sebastian
 
Zurück