gpt4 book ai didi

java - Postgres JDBC 驱动程序 : PSQLException: syntax error at or near RETURNING

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:54 25 4
gpt4 key购买 nike

出于某种原因,JDBC PostgreSQL 驱动程序正在添加:RETURNING * 到 select 语句的末尾。为什么?

代码:

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);

异常:

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)

数据源(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 JDBC 驱动版本

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1101-jdbc41</version>
</dependency>

抓包

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

最佳答案

我完成此操作的最简单方法是在 sql 代码末尾添加“;--”:

String sql = "INSERT INTO testTable(var1, var2) values ("1","2"), ("1","2") RETURNING id;--";

PreparedStatement ps = getConnection().prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();

关于java - Postgres JDBC 驱动程序 : PSQLException: syntax error at or near RETURNING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24636120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com