Postgres pilote JDBC: PSQLException: erreur de syntaxe sur ou près de REVENIR
Pour une raison quelconque, le JDBC PostgreSQL pilote est d'ajouter: RETOUR * à la fin des instructions select.
Pourquoi?
Code:
protected static final String AUTH_QUERY = "SELECT \"SECRET\" FROM \"user\" WHERE \"NAME\" = :name";
String password = sql2o.open().createQuery(AUTH_QUERY).addParameter("name", username).executeScalar(String.class);
Exception:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "RETURNING"
Position: 47
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at org.sql2o.Query.executeScalar(Query.java:533)
at org.sql2o.Query.executeScalar(Query.java:577)
at org.sql2o.Query.executeScalar(Query.java:568)
Source de données (JNDI):
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="mydb" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/mydb</Arg>
<Arg>
<New class="com.mchange.v2.c3p0.ComboPooledDataSource">
<Set name="driverClass">org.postgresql.Driver</Set>
<Set name="jdbcUrl">jdbc:postgresql://localhost:5432/mydb</Set>
<Set name="user">user</Set>
<Set name="password">pass</Set>
</New>
</Arg>
</New>
</Configure>
PostgreSQL pilote JDBC version
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1101-jdbc41</version>
</dependency>
De capture de paquets
https://postimg.cc/image/gbl2dq4zx/
No. Time Source Destination Protocol Length Info
12 0.175636000 127.0.0.1 127.0.0.1 PGSQL 182 >P/B/D/E/S
Frame 12: 182 bytes on wire (1456 bits), 182 bytes captured (1456 bits) on interface 0
PostgreSQL
Type: Parse
Length: 69
Statement:
Query: SELECT "SECRET" FROM "user" WHERE "NAME" = $1 RETURNING *
Parameters: 1
Type OID: 1043
github.com/pgjdbc/pgjdbc/blob/master/org/postgresql/jdbc3/... / de la ligne 148
OriginalL'auteur tty | 2014-07-08
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à un problème avec sql2o. Les commentaires sur le rapport de bug dire:
Depuis Sql2o 1.6.0, comprennent la sql2o-postgres de la dépendance et de l'utilisation
new PostgresQuirks()
au lieu deQuirksMode
.new Sql2o(dataSource, QuirksMode.PostgreSQL)
résolu mon problèmeDepuis Sql2o 1.6.0, vous devrez inclure le
sql2o-postgres
de la dépendance et de l'utilisationnew PostgresQuirks()
au lieu deQuirksMode
.merci à vous, y compris dans la réponse.
OriginalL'auteur Nathan Hughes
La façon la plus simple que j'ai fait a été d'ajouter ";--" à la fin du code sql:
Pourquoi ce travail?
Parce que PreparedStatement d'ajouter quelque chose à la fin et il se casse le retour de l'option. Si vous souhaitez voir ce qui se passe exactement vous devez déboguer vos demandes à la base de données..
OriginalL'auteur Ariloum
Dans mon cas s'est produit lorsque u essayé d'insérer la liste vide d'objets.
OriginalL'auteur Oleg Galushko