2017-02-11 2 views
2

Wie kann ich eine Ergebnismenge mithilfe einer vorbereiteten Anweisung aus der Datenbank abrufen? Ich habe keine Ahnung, wie ich mit meinen Codes fortfahren soll, ich habe die Abfrage und die Variablen für die vorbereitete Anweisung bekommen, und jetzt bin ich daran gehindert, aus der Datenbank zu holen.Java ruft Ergebnisse aus der Datenbank ab

Antwort

3

Sie können keine Feldnamen als Parameter übergeben. Nur Daten können so übergeben werden. Die Bedingung

WHERE ?=? 
-- ^

mit Substitutionen Field1 und field1 buchstäblich interpretiert werden, als

WHERE 'Field1'='field1' -- note the quotes around the values 

Wenn Sie den Zustand von Feldnamen konstruieren möchten, müssen Sie SQL-Zeichenfolge selbst konstruieren. Zum Beispiel könnten Sie

SELECT * FROM Table1 WHERE %s=? 

und verwenden Sie es als Format-String für eine formatter, vorbei Field1 für das Argument übergeben %s zu ersetzen. Stellen Sie sicher, dass die Namen der Felder nicht vom Benutzer eingegeben werden können: Alles, was Teil der SQL-Zeichenfolge wird, muss aus einem Pool von Konstanten in Ihrem Programm oder der Konfigurationsdatei stammen, um SQL-Injection-Angriffe zu vermeiden.

+0

Oh ich bekomme es danke! Aber sagen wir, wenn ich das Ergebnis anzeigen möchte, wie listet ich sie aus den Feldern auf, die bestanden wurden? – newbie95

+0

@ newbie95 Verwenden Sie ['ResultSetMetaData'] (http://stackoverflow.com/a/696798/335858). – dasblinkenlight

+0

@dashblinkenlight Sorry ich meinte was, wenn von einer anderen Klasse die Abfrage wie "Feld1, Feld2 aus Tabelle wo ...." übergeben wurde, wie setze ich Feld1 und Feld2 (Anzahl der Felder je nach Abfrage bestanden) in die vorbereitete Aussage für mich, um das Resultset abzurufen? – newbie95

Verwandte Themen