Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen?

Maxder

Mitglied
Hallo,
ich schreibe gerade ein Java Programm mit Eclipse, in dem ich auf eine Datenbank zugreifen. Ich habe die Variable var als String definiert und sie bekommt vorher einen Wert zugewiesen. Nun will ich die Variable var in der SELECT Abfrage verwenden:
String sqlString="SELECT * FROM Tabelle1 WHERE Schluessel1=?";
PreparedStatement pstmt = dbVerbindung.prepareStatement(sqlString);
pstmt.setString(1, var);

Dann bekomme ich folgende Fehlermeldung:
[Microsoft][ODBC-Treiber für Microsoft Access]COUNT-Feld ungültig.

Wenn ich aber den aktuellen Wert von var manuell in die SELECT Abfrage eingebe funktioniert alles:
String sqlString="SELECT * FROM Tabelle1 WHERE Schluessel1='$%$'";

Das Problem ist nur, dass var sich je nach vorangehender Ereignisse ändert und vom Programm festgelegt wird, deshalb muss ich die Variable an sich in die SELECT Abfrage reinschreiben.

Weis jemand wie ich das machen kann?

mfg
 

Evil-Devil

Top Contributor
Ist Schluessel1 ein Textfeld und soll der Wert verglichen oder ähnlich sein?

Wenn er identisch ist kannst du weiterhin mit = abfragen. Aber der Text muss natürlich in Hochkommata stehen. Wenn er ähnlich sein soll greifst du zu LIKE. DeiN % sollte an sich so gar nicht klappen.

[sql]select feld1, feld2, feld3 from tabelle1 where schluessel1 = 'hallo java welt'[/sql]

[sql]select feld1, feld2, feld3 from tabelle1 where schluessel1 like '%java%'[/sql]

Und Feldnamen sollten sofern es nicht zu vermeiden geht niemals nach einem Schlüsselwort benannt sein. Ebenso Tabellen- und Spaltennamen klein schreiben. Spätestens unter Linux kann das zu Problemen führen.
 
C

Camino

Gast
Vielleicht ist Schluessel1 kein String sondern einen Zahl (Integer)? Dann musst du natürlich beim PreparedStatement einen Integerwert und keinen String übergeben.
 

Maxder

Mitglied
In der String Variable var ist ein Text gespeichert. Dieser ändert sich aber immer. Das Programm liest eine Textdatei ein und speichert einen Abschnitt von drei Zeichen in der Variable var.
Deswegen kann ich nicht einfach WHERE Schluessel1='text' schreiben.
 

Maxder

Mitglied
Ich habe meine Datenbank mit Access geschrieben, da kann man ein Feld nicht als Varchar definieren nur als:
Text
Memo
Zahl
Datum/Uhrzeit
Währung
Autowert
Ja/Nein
OLE-Objekt
Hyperlink
Anlage
Berechnet
Nachschlage Assistent
 
C

Camino

Gast
Also, beim Googeln nach der Fehlermeldung hab ich das gefunden:
ODBC Error Code = 07001 (Wrong number of parameters)

[Microsoft][ODBC Microsoft Access Driver]COUNT-Feld ungültig.

Hint: The cause of this error is usually that your query contains a reference to a field which does not exist. You should verify that the fields included in your query exist and that you have specified their names correctly.
 

Maxder

Mitglied
Ich habe jetzt vor der SELECT Abfrage var manuell als $%$ festgelegt, das ist der Wert der in der Spalte Schluessel1 in der 1.Zeile steht, aber es kommt genau die selbe Fehlermeldung. Und die Spalte heist definitiv Schluessel1.
 
C

Camino

Gast
Äh, in der Spalte soll der Text "$%$" stehen? Nicht, dass das irgendwelche reservierten Steuerzeichen für irgendwas sind. Ansonsten fällt mir gerade auch nicht viel mehr ein...
 
S

SlaterB

Gast
mal grundsätzlich

String sqlString="SELECT * FROM Tabelle1 WHERE Schluessel1='$%$'";

Das Problem ist nur, dass var sich je nach vorangehender Ereignisse ändert und vom Programm festgelegt wird, deshalb muss ich die Variable an sich in die SELECT Abfrage reinschreiben.
wenn du einfach einen String zusammenbaust, etwa
Java:
String sqlString="SELECT * FROM Tabelle1 WHERE Schluessel1='"+var+"'";
müsste das zumindest schon variabel sein, und der String ist je nach Inhalt von var nicht mehr von einem komplett manuell erzeugten String zu unterscheiden

allgemein ist natürlich richtig dass man lieber PreparedStatement verwenden sollte,
aber wie funktioniert es mit String-Zusammenbau?
 

HimBromBeere

Top Contributor
bin nur kurz über das Thema geflogen... wenn du einen SQL-String zusammenbauen willst, solltest du am besten preparedStatements verwenden (Galileo Computing :: Java ist auch eine Insel – 22.10 Vorbereitete Anweisungen (Prepared Statements)). Das ist am einfachsten und v.a. am sichersten (Stichwort SQL-Injection).


EDIT: Heißt die Spalte schluessel1 odr Schluessel1? SQL ist soweit ich weiß case-sensitive, also müsstest du im weiten Fall schreiben
SQL:
WHERE "Schluessel1" = ...
, also in Anführungszeichen
 
Zuletzt bearbeitet:

Evil-Devil

Top Contributor
EDIT: Heißt die Spalte schluessel1 odr Schluessel1? SQL ist soweit ich weiß case-sensitive, also müsstest du im weiten Fall schreiben
SQL:
WHERE "Schluessel1" = ...
, also in Anführungszeichen

Wenn schon mit ` und nicht mit "
[sql]where `Schluessel1`[/sql]

Da es ja Access und kein SQL ist und Windoof selbst nicht zwischen Groß- und Kleinschreibung unterscheidet ist das zumindest bei Access egal. Aber alles klein schreiben sollte man trotzdem.
 
S

SlaterB

Gast
Wenn schon mit ` und nicht mit "
[sql]where `Schluessel1`[/sql]
vielleicht wählst du das bewusst so, aber ist das dann nicht einen Kommentar wert?
allgemein ist ` doch kein sinnvolles Zeichen, musste ich auch erst auf der Tastatur suchen

überall ist doch wohl ' das Standard-einfache-Anführungszeichen, etwa auch in Java
[sql]where 'Schluessel1'[/sql]
 

Evil-Devil

Top Contributor
Wenn man es direkt in Java schreibt mag das klappen. Das ` ist allerdings afaik das offizielle Zeichen zum escapen von Bezeichnern in SQL.

Sonst würden ja nicht diverse SQL Tools entsprechende Statements erzeugen.

z.B.
[sql]select `user_id`, `timestamp` as `reg_time` from `users`[/sql]

Wie gesagt, spätestens bei Schlüsselwörtern kann es zu Problemen kommen. Und mit ' wird in SQL eine Zeichenkette beschrieben. Das man damit Spalten anspricht habe ich noch nie gesehen.

[edit]Ok, kurze Google Suche hat ergeben das nahezu jede SQL Distri ihre eigene Suppe kocht. Von ", `, [] bis ' ist nahezu alles dabei und konfigurierbar[/edit]
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Ok, kurze Google Suche hat ergeben das nahezu jede SQL Distri ihre eigene Suppe kocht. Von ", `, [] bis ' ist nahezu alles dabei und konfigurierbar

Will ich doch meinen... "spaltenname" hab ich genauso schon gesehen wie 'spaltenname' und `spaltenname` (wobei Letzres am hässlichesten aussieht, jetzt mal von der reinen Äthestik :D)

EDIT: Ist dazu im SQL-Standard nichts gesagt?
 
Zuletzt bearbeitet:

xehpuk

Top Contributor
So habe ich auch gedacht, bis ich auf MySQL traf, wo anscheinend
Code:
`
der Standard zu sein scheint,
Code:
'
aber auch möglich ist.

Huch, irgendwie Seite 2 nicht gesehen. :oops:
 

Maxder

Mitglied
Ich habe es doch noch im Internet gefunden, ich muss die Select Abfrage einfach so schreiben und das Prepared Statement weglassen:
SELECT * FROM Tabelle1 WHERE Klartext='" + var + "'"
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
L Oracle SQL anpassen um variable zu nutzen Datenbankprogrammierung 1
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
A Fehlermeldung: JOIN FETCH expressions cannot be defined with an identification variable Datenbankprogrammierung 0
H datantyp einer variable ermittel mit sql Datenbankprogrammierung 3
C Variable in MySQL einfügen Datenbankprogrammierung 2
T Daten aus DB in variable Zahl an Variablen speichern Datenbankprogrammierung 18
A Connection Variable in anderer Klasse verwenden -> statement Datenbankprogrammierung 2
S Integerwert auswerten und als Variable speichern Datenbankprogrammierung 2
P Inhalt einer Variable in Datenbank schreiben Datenbankprogrammierung 13
G \'\"+Variable+'\"\ Datenbankprogrammierung 7
krgewb SELECT ohne IdClass-Annotation Datenbankprogrammierung 3
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
OnDemand Select * from bringt keine Rückgabe Datenbankprogrammierung 49
OnDemand Select vs Update ins blaue, was ist teurer? Datenbankprogrammierung 11
M JPA: select all mit unterschiedlichem Tablename Datenbankprogrammierung 2
A MySQL Select und Insert in Java Datenbankprogrammierung 15
J JPA: Wie sieht der select aus? Datenbankprogrammierung 2
D geänderte SELECT Abfragen Datenbankprogrammierung 15
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
T sqlite select Datenbankprogrammierung 12
D Oracle NullPointerException bei select mit Null Values Datenbankprogrammierung 5
F MySQL Was bedeuten die Einzelnen Zeichen in Select Querrys? Datenbankprogrammierung 1
J SQL SELECT mit einem Array Datenbankprogrammierung 1
J SELECT Abfrage/Suche Datenbankprogrammierung 4
E Kann man in einer if-Bedingung auch SELECT-Statements überprüfen? Datenbankprogrammierung 23
M SQL-Exception trotz funktionierendem SELECT Datenbankprogrammierung 4
U PostgreSQL SELECT Statement Datenbankprogrammierung 5
L Select Anweisung wird falsch interpretiert Datenbankprogrammierung 3
C HSQLDB Platzhalter in SELECT Datenbankprogrammierung 6
I SELECT bei Datenbankverbindung Datenbankprogrammierung 6
C MySQL JPA - namedQuery (SELECT) -getResultList() - liefert falsches Ergebnis Datenbankprogrammierung 1
S select: alle ergebnisse ermitteln Datenbankprogrammierung 5
G SQLite SQLite Select für View vereinfachen/optimieren Datenbankprogrammierung 4
C SQL-Statement SELECT über 3 Tabellen Datenbankprogrammierung 5
H HSQLDB insert .... values("test1",select test2 from foo) Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
W SELECT oder Programm-Logik Datenbankprogrammierung 10
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
T MySQL Dynamisch Suchen Select Datenbankprogrammierung 4
D ArrayList in Select Datenbankprogrammierung 12
N Select mit join Datenbankprogrammierung 3
F Oracle select sum() join select sum() Datenbankprogrammierung 9
B SELECT ja - INSERT nein (MySQL) Datenbankprogrammierung 3
R Oracle Performance bei SELECT mit vielen Reihen Datenbankprogrammierung 5
T MySQL Db select * und Insert schlagen fehl Datenbankprogrammierung 2
I Select-Statement optimieren Datenbankprogrammierung 14
R Derby/JavaDB Möglichkeit von einem Random Select! Datenbankprogrammierung 6
B Mehrfachschachtelung SELECT Datenbankprogrammierung 2
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
GianaSisters MySQL Datenbank Select error Datenbankprogrammierung 5
R Select Statement als temporärer Table Datenbankprogrammierung 7
R Derby/JavaDB Select Statement Where bedingung will nicht ganz! Datenbankprogrammierung 4
R Derby/JavaDB Select TOP Statement geht nicht Datenbankprogrammierung 3
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
F wie funktioniert if Statement in SELECT? Datenbankprogrammierung 2
J [Hibernate] Select Statement Datenbankprogrammierung 4
A SQLite SELECT von ungleichen Spaltenpaaren Datenbankprogrammierung 10
Eldorado MySQL SELECT mit GROUP BY und INNER JOIN Datenbankprogrammierung 2
M Hibernate JPQL SELECT optional? Datenbankprogrammierung 2
C Datenbank-Abfrage, if im Select Datenbankprogrammierung 9
G Aufruf von SELECT INTO Datenbankprogrammierung 8
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
X Select Query auf Substring Datenbankprogrammierung 2
S Select eines bestimmten Datensatzes Datenbankprogrammierung 4
M Select * from mydaten where ... Datenbankprogrammierung 4
T Unerwartete Datenbankausgabe bei "select now()" (es wird ein .0 angehängt) Datenbankprogrammierung 5
M Probleme bei Select in Schleife Datenbankprogrammierung 7
G SELECT liefert leere Zeilen Datenbankprogrammierung 32
M SELECT longtext -> als String behandeln Datenbankprogrammierung 6
H Select in einem Select Datenbankprogrammierung 7
G Select- Abfrage Datenbankprogrammierung 19
S Insert mit Select Datenbankprogrammierung 6
G MSSQL Server SELECT Abfrage funktioniert nicht Datenbankprogrammierung 4
R SELECT aus hsqldb mit Parameter Datenbankprogrammierung 2
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
A Problem mit einem Select-Befehl Datenbankprogrammierung 5
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
S Select über mehrere Datenbanksysteme Datenbankprogrammierung 14
P SELECT Datenbankprogrammierung 20
T select Abfrage in Java Integer speichern ? Datenbankprogrammierung 2
B fehler bei select befehl Datenbankprogrammierung 5
S Select von bis in DB2 Datenbankprogrammierung 8
S Select mit PreparedStatement Datenbankprogrammierung 2
E Ein If und ein SELECT in Oracle? Datenbankprogrammierung 2
T Select Statement auf Relation Datenbankprogrammierung 3
S PostgreSQL SELECT/UPDATE etc. Datenbankprogrammierung 4
4 Probleme mit Select abfrage Datenbankprogrammierung 4
G Fehler in der select-Abfrage Datenbankprogrammierung 3
N SELECT: Datensatz sperren Datenbankprogrammierung 6
isowiz SELECT SUM() Ergebnis in Java abfragen Datenbankprogrammierung 6
T LIMIT In SELECT Anweisung Datenbankprogrammierung 4
R Select und Insert in Schleife - Problem mit ResultSet Datenbankprogrammierung 2
G SELECT Name= " " verhindern Datenbankprogrammierung 5
G Syntax für Select - Abfrage mit Variablen Datenbankprogrammierung 39
J SELECT-Statement Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben