Ich habe die folgende SQL-Anweisung:eine Zeichenfolge in eine vorbereitete Anweisung Einfügen ohne ‚‘
Select i.imageID, theImage, translationRating
From images i
inner join translationchains t
on t.imageId = i.imageid
where i.userID=(someUserID) And i.translated =0
and t.targetLang in (select targetLang from translationChains)
ich es eine vorbereitete Aussage machen wollen in meinem Java-Code zu verwenden:
Select i.imageID, theImage, translationRating
From images i
inner join translationchains t
on t.imageId = i.imageid
where i.userID=? And i.translated =0
and t.targetLang in (select ? from translationChains)
der Eingabe für die erste? ist eine Benutzer-ID (Integer) und es funktioniert gut.
der zweite Eingang ist eine Zeichenfolge, die eine languageId enthalten - es ist ein String ist, dass entweder eine Nummer enthalten, die eine Sprache, oder die Zeichenkette „targetLang“ darstellen, die der Name der Spalte (= alle langs)
ist in meinem Java-Code habe ich folgendes:
Image.setInt(1, userID);
Image.setString(2, langID);
Image.executeQuery()
mein Problem ist, wenn ich die Zeichenfolge „targetLang“ als zweiter Parameter bin das Senden die vorbereitete Anweisung eingefügt wird er als ‚targetLang‘ (mit 'vor und nach '), mit Zahlen ist es kein Problem, weil 3 =' 3 ', aber mit Strings gibt es mir andere Ergebnisse aus Was ich brauche - ich bekomme immer eine leere Ergebnismenge, weil nichts mit 'targetLang' gleich ist. Ich muss diese Zeichenfolge in die vorbereitete Anweisung ohne die '. ist es möglich oder muss ich etwas anderes als die vorbereitete aussage verwenden?
Ich weiß, dass ich eine Zeichenfolge erstellen, die alle diese Abfrage enthalten, aber ich bin auf der Suche nach etwas elegantere tnx
edit:
Dies ist die Tabelle erstellen translationChains:
Create Table if not exists TranslationChains (
ImageID int (10) NOT NULL,
SourceLang int NOT NULL,
TargetLang int NOT NULL,
Translated tinyint default 0,
Translation text,
Translator varchar (30),
CONSTRAINT translate_image PRIMARY KEY (ImageID,SourceLang, TargetLang),
FOREIGN KEY (ImageID) REFERENCES Images(ImageID) ON DELETE CASCADE,
FOREIGN KEY (SourceLang) REFERENCES Languages(languageID) ON DELETE CASCADE,
FOREIGN KEY (TargetLang) REFERENCES Languages(languageID) ON DELETE CASCADE)
Wie Sie sehen können, versuche ich Bilder entsprechend der "targetLang" Spalte wh Ich bin eine int-Spalte. Jede Nummer repräsentiert eine Sprache.
Jetzt habe ich zwei Optionen in Bilder aus dieser Tabelle auswählen:
- eine bestimmte Sprache auswählen, das heißt eine Zahl als zweiten Eingang geben.
- Auswahl aller Sprachen, d. H. Einstellung der zweiten Eingabe als Spaltenname "targetLang".
Also ich bin nicht mit der festen Zeichenfolge "targetLang" verglichen. Ich möchte alle möglichen Werte für diese Spalte auswählen (wählen Sie targetLang aus translationChains).
tnx, aber können Sie die Antwort auf mich klären? Ich bin mir nicht sicher, was ich tun soll. Ich benutze whitelisting = Ich überprüfe die Benutzereingabe und dann entscheiden, was in die Abfrage einfügen, aber ich bin mir nicht sicher, wie Sie es mit dem Problem einfügen –
bearbeitet den ursprünglichen Beitrag –
tnx! Diese Abfrage funktioniert: SELECT i.imageID, theImage, ÜbersetzungBewertung FROM Bilder i INNER JOIN TranslationChains t ON t.imageId = i.imageID WHERE i.userID =? UND i.translated = 0 UND? IN (t.targetLang, 'targetLang') –