2009-06-02 8 views
0

Ich versuche, die prepareStatement Funktion zu verwenden. Der Code ist unten. Nachdem es ausgeführt wurde, gibt es mir eine Reihe von vlicense Zeichenfolgen anstelle der Werte zurück.JDBC prepareStatement funktioniert nicht

Wenn der Code die statement.setString() Fertigstellung wird die Aussage:

select 'vlicense' from Vehicle 

Allerdings muss es sein:

select vlicense from Vehicle 

ohne Anführungszeichen. Kann mir jemand sagen, wo ist das Problem?

Antwort

4

Sie können keine Parametermarkierungen für Spaltennamen, Tabellennamen, Datentypnamen oder im Grunde für alles verwenden, was keine Daten ist.

0

Die? kann nicht die Felder verwendet werden, nur um zu spezifizieren, wie einige Filter in der Abfrage zu tun:

statement = conn.prepareStatement("select field from Vehicle where name=?"); 

In Ihrem Fall wird Ihre Abfrage erstellt als:

select 'vlicense' from Vehicle 

was bedeutet: ME eines Strings 'vlicense' für jede Aufzeichnung von 'Fahrzeug'. Und Sie erhalten n wiederholte Strings abhängig von der Anzahl der Datensätze in Ihrer Tabelle

2

Wenn Sie eine Bindevariable zu einer Anweisung wie folgt hinzufügen, ist es maskiert, so dass tatsächliche SQL-Zeichenfolge in Ihrem Beispiel würde gehen . Datenbank als „SELECT‚vlicense‘FROM Fahrzeug‘, eine wörtliche Zeichenfolge anstelle des Spaltennamen auswählen, die Sie wollen

Sie müssen diese Variable Spaltennamen in der SQL-Anweisung verketten, bevor Sie es vor:

statement = oConnection.prepareStatement("SELECT " + vlicense + " FROM Vehicle");

Bind-Variablen sind wirklich für Abfrageparameter im Gegensatz zu Dyn Amic Abfragen.

0

Es hat nichts mit jdbc, prepared-statements oder mysql zu tun.
Es ist nur eine falsche sql Aussage.

Wenn Sie Folgendes eingeben:

Select 'justanexample' from Vehicle 

und die Tabelle enthält 4 Zeilen, erhalten Sie 4 mal

'justanexample' 
'justanexample' 
'justanexample' 
'justanexample' 

als Ergebnis.

Sie nicht Ihr die Tabellenstruktur angeben, aber ich denke, die Aussage irgendwie sollte wie folgt aussehen:

select * from Vehicle where license = ? 
Verwandte Themen