SQL Tabelleneintrag wenn nicht existiert

JavaBeginner

Ensign
Registriert
Juli 2015
Beiträge
142
Hey, ich habe eine Tabelle erstellt und stehe nun vor dem Problem, dass ich falls dieser eine Eintrag (z.b. UUID) nicht existiert eine neue Spalte ausgefüllt werden soll. Mit meinem jetzigen Code funktioniert dies leider nicht.
Code:
 st.executeQuery("CREATE TABLE IF NOT EXISTS 'ActionPoints' (UUID VARCHAR (128), Points INTEGER, verified TEXT, databaseid INTEGER, name VARCHAR (128))");
Ist meine Tabelle.
Code:
st.executeQuery("INSERT INTO ActionPoints(UUID, Points, verified, databaseid, name)SELECT "+uuid+" FROM ActionPoints WHERE NOT EXISTS (SELECT * FROM orders WHERE UUID  = "+uuid+");");
Mit dem Abschnitt möchte ich, sollte noch keine Eintragungen für diesen User bestehen, die UUID eintragen lassen (später auch mehrere Daten).
 
Servus,
nett wäre es auch den Fehlercode zu posten...
Meine Vermutung wäre die fehlenden ' ' bei der uuid..
st.executeQuery("INSERT INTO ActionPoints(UUID, Points, verified, databaseid, name)SELECT "+uuid+" FROM ActionPoints WHERE NOT EXISTS (SELECT * FROM orders WHERE UUID = '"+uuid+"');");
 
capilano schrieb:
Servus,
nett wäre es auch den Fehlercode zu posten...
Entschuldige, hatte ich vergessen.
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM ActionPoints WHERE NOT EXISTS (SELECT * FROM orders WHERE UUID  = HpbP4\S' at line 1
Ist die Fehlermeldung.
 
Wo kommt den dieses backslash S her? was hat den die uuid für ein Datenformat? ich würde die einfach mal als String casten

ach jetzt seh ichs: SELECT "+uuid+" ist totaler Käse. es muss UUID ohne + und " sein
Ergänzung ()

Code:
st.executeQuery("INSERT INTO ActionPoints(UUID, Points, verified, databaseid, name)SELECT UUID FROM ActionPoints WHERE NOT EXISTS (SELECT * FROM orders WHERE UUID  = "+uuid+");");

kannst ja nicht eine Spalte auswählen und dann einen Spalteninhalt als Spaltennamen angeben ;)
Ergänzung ()

und hinten natürlich noch Anführungszeichen:

Code:
    st.executeQuery("INSERT INTO ActionPoints(UUID, Points, verified, databaseid, name)SELECT UUID FROM ActionPoints WHERE NOT EXISTS (SELECT * FROM orders WHERE UUID  = '"+uuid+"');");
 
Zuletzt bearbeitet:
Bekomme nun
Code:
Column count doesn't match value count at row 1
ausgegeben.
Die UUID sieht z.b. folgendermaßen aus: AiRX+smUv6ghBbJb0C7OnMSR2P0=
 
sry, aber hast du dich eigentlich schon irgendwie mit SQL mal befasst? das sind doch alles eindeutige Syntax-Fehler. In einem Forum fragt man eigentlich wegen Logik-Fehlern nach, deshalb hab ich auch am Anfang den Fehler übersehen.
Es steht doch dort: Du hast unterschiedliche Mengen an Spalten. Du wählst einmal UUID und einmal alle Spalten aus. Das klappt natürlich nicht, wenn du die Ergebnismengen dann vergleichen willst.

Code:
 st.executeQuery("INSERT INTO ActionPoints(UUID, Points, verified, databaseid, name)SELECT UUID FROM ActionPoints WHERE NOT EXISTS (SELECT UUID FROM orders WHERE UUID  = '"+uuid+"');");
 
Ich danke dir. Bezüglich MySQL...habe bisher immer versucht mich davor zu drücken da ich mit der Syntax nicht ganz klar komme. Ich habe bis jetztalles in einzelnen Dateien gespeichert. Das geht nur leider nicht mehr, deshalb muss ich MySQL verwenden und komme dabei ins verzweifeln.
 
Dann würd ich dir mal ein gutes Einsteiger-Tutorial empfehlen und Fehlermeldungen immer auch lesen ;)
Nix für ungut, gell. Aber sonst hat das keinen Sinn und du hängst immer wieder wegen Kleinigkeiten.
Nützlich ist auch, sich die Abläufe der Befehle mal auf dem Papier aufzuzeichnen. Dann versteht mans auch besser, wie der Ablauf ist und warum etwas nicht funktioniert.
Ach ja, die Erklärung zum letzten Fehler hast du verstanden oder?:)
 
Glaube schon,
Code:
st.executeQuery("INSERT INTO ActionPoints(UUID)SELECT UUID FROM ActionPoints WHERE NOT EXISTS (SELECT UUID FROM ActionPoints WHERE UUID  = '"+uuid+"');");
Sollte die Lösung sein(bekomme jedenfalls keine Fehlermeldung mehr).
Ist die Ausgabe "false" für den INSERT-Code korrekt?(glaube ja...frage aber zur sicherheit noch einmal)
 
Zuletzt bearbeitet:
Zurück
Oben