2012-04-02 8 views
2

Ich verbinde eine Verbindung zu einer DB2-Datenbank (DB2 v9.7.400.501) über meine Java-Webanwendung mithilfe des IBM DB2 Type 4-Treibers (db2jcc4.jar). Wenn ich versuche, eine SQL-Anweisung wie folgt auszuführen,SQL - UPPER-Funktion in DB2 funktioniert nicht

SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser'); 

Ich erhalte die folgende Ausnahme:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;= UPPER('testuser');END-OF-STATEMENT, DRIVER=4.12.55

Das Problem ist von der UPPER Funktion, da normalerweise eine normale select-Anweisung ausführt.

+0

"END-OF-STATEMENT" würde vielleicht folgern, dass, wie auch immer Sie es ausführen, das erste einfache Zitat als das Ende der Zeichenkette interpretiert? Sie könnten versuchen, die einfachen Anführungszeichen durch zwei einfache Anführungszeichen zu ersetzen, um zu testen, ob es das ist. – Bridge

+0

@Bridge Jetzt bekomme ich eine andere Ausnahme: 'com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Fehler: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = testuser; ER (LOGIN) = UPPER (''; CONCAT, DRIVER = 4.12.55' – user1135357

+0

Sieht aus, als wäre meine Vermutung falsch – Bridge

Antwort

2

Vielleicht sollten Sie verwenden, ist auf diese Weise:

SELECT * FROM USERS WHERE UPPER(USERNAME) LIKE UPPER('testuser'); 

Ihr Code mit '=' ist, scheint für SQLite ok, aber nicht wissen anbout db2.

UPD. Nach einigen Nachforschungen kann ich sagen, dass der Fehler von Java-Code verursacht wird, der versucht, mehrere Anweisungen in einer Abfrage mit ';' als Trennzeichen. Sie sollten versuchen, PreparedStatement, addBatch() und executeBatch() für mehrere Anweisungen zu verwenden.

UPD2. Dies ist ein DB2-Problem. PostgreSQL, afaik, erlaubt mehrere Anweisungen in einer einzigen Abfrage.

+0

Nein, es macht keinen Unterschied. Ich habe die folgende Ausnahme: 'com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2-SQL-Fehler: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = ;; KE UPER ('testuser'); END-OF-STATEMENT , DRIVER = 4.12.55' – user1135357