HSQLDB Platzhalter in SELECT

corvus

Mitglied
Hallo,
über die Suche konnte ich kein ähnliches Thema finden, deshalb schreib ich es mal neu.
Ich hab vor kurzem angefangen, mich für ein Projekt mit HyperSQL zu beschäftigen. Vorher hab ich nur mit MySQL gearbeitet. Nur hab ich ein kleines Problem bei der Umstellung.
Bei MySQL hab ich immer mit dem ?-Platzhalter gearbeitet (Bsp.: SELECT * FROM table WHERE field = ?). Den hab ich dann über die setSonstwas() Methode vom PreparedStatement ersetzt:
Java:
PreparedStatement prst = connection.prepareStatement(query);
prst.setString(1, "Wert");
Das hat immer wunderbar funktioniert. Deshalb hab ich die gleiche Methode jetzt für HSQL verwendet. Dummerweise scheint das mit dem ? als Platzhalter nicht zu funktionieren, jedenfalls bekomme ich in der Zeile
Code:
PreparedStatement prst = connection.prepareStatement(query);
immer einen Fehler. Wenn ich jedoch den Query ohne Platzhalter zusammenbastle (Bsp.: "SELECT * FROM table WHERE fiel = " + value), gibt es keine Probleme.
In den Anleitungen konnte ich auch nichts finden, was mir irgendwie weiterhilft, da wird das ? kaum erwähnt. Deshalb wollte ich mal hier fragen, ob vielleicht jemand eine Lösung dafür hat.
Vielen Dank schonmal im Voraus und viele Grüße
corvus
 
Hast recht, sorry. Hier der ganze Fehler:
Code:
java.sql.SQLSyntaxErrorException: unexpected token: ?
	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
	at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
	at me.corvus.dbconfig.DBConfig.main(DBConfig.java:34)
Caused by: org.hsqldb.HsqlException: unexpected token: ?
	at org.hsqldb.error.Error.parseError(Unknown Source)
	at org.hsqldb.ParserBase.unexpectedToken(Unknown Source)
	at org.hsqldb.ParserBase.checkIsIdentifier(Unknown Source)
	at org.hsqldb.ParserDQL.readTableName(Unknown Source)
	at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
	at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
	at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
	at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
	at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
	at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
	at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
	at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
	at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
	at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
	at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
	at org.hsqldb.ParserCommand.compilePart(Unknown Source)
	at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
	at org.hsqldb.Session.compileStatement(Unknown Source)
	at org.hsqldb.StatementManager.compile(Unknown Source)
	at org.hsqldb.Session.execute(Unknown Source)
	... 3 more
 
Funzt bei mir. (hsqldb=Version 2.3.1)

Java:
			PreparedStatement prepareStatement = connection
					.prepareStatement("select id,vorname,nachname from person where nachname=?");
			prepareStatement.setString(1, "Merkel");
 
Ok, bei mir funktionierts jetzt auch. Hab mir einfach alles nochmal runtergeladen. Keine Ahnung, woran es letzten Endes lag.
Aber eine Frage noch: Kann ich das ? als Platzhaler auch für die Tabelle verwenden? Also "SELECT * FROM ?"
 

Zurück
Oben