gpt4 book ai didi

java - org.postgresql.util.PSQLException : ERROR: syntax error near «, » 在 Java 中

转载 作者:行者123 更新时间:2023-12-02 06:41:52 24 4
gpt4 key购买 nike

下面是Java中prepareStatement生成的查询:

insert into schema.table(cedula, actividad, mercado, venta_mensual, fortalezas, crecer,
financiamiento, monto, patente, contador, regimen_tri, problemas, bn_servicios, cursos )
values ('val', 'GAM', 'GAM', '0', 'Calidad', 'Sí', 'Sí', '122', 'Sí', 'Sí', 'ddd', 'aaa','ccc', 'bbb' )

Java代码是:

try {
PreparedStatement pstmt = conexion.prepareStatement(query);
pstmt.setString(1, n.getCedula());
//the rest of the sets of the statement continue here from 1 to 13
pstmt.executeUpdate();
conexion.createStatement().execute(query);
return true
} catch (SQLException e) {
e.printStackTrace(); // This error
return false;
}

查询在 try 语句中执行,并将值正确插入到数据库中,但它也会在第 192 行抛出以下异常:here 'val':

 org.postgresql.util.PSQLException: ERROR: error de sintaxis en o cerca de «,»
org.postgresql.util.PSQLException: ERROR: syntax error near ',' java

与 postgres 相关的错误跟踪在这里:

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:366)

顺便说一下,该表有一个 bigserial 值,所有其他值都显示在查询中。提前致谢!

最佳答案

如果查询在 values 子句中包含字符串常量,如问题中所示:

query = "insert into table(cedula, actividad, mercado) "
+ " values ('val', 'GAM', 'GAM' )";

那么这部分代码就可以正常工作了:

conexion.createStatement().execute(query);

但是这部分代码将不起作用:

pstmt.setString(1, n.getCedula()); 
//the rest of the sets of the statement continue here from 1 to 13

它将抛出PSQLException:列索引超出范围:X,列数:0,因为PreparedStatement.setXXX方法需要占位符 在 SQL 语句中。
另一方面,当插入语句包含占位符时(我假设您的 INSERT 确实包含占位符,因为您没有遇到上述异常):

query = "insert into tabla(cedula, actividad, mercado) "
+ " values ( ?, ?, ? )";

then pstmt.setString... 语句可以正常工作,但是这个语句:

   conexion.createStatement().execute(query);

将抛出异常:PSQLException: ERROR: ',' 附近的语法错误
如果您的意图是执行 INSERT 两次,第一次使用占位符,第二次使用字符串值,则必须按以下方式执行:

query1 = "insert into tabla(cedula, actividad, mercado) "
+ " values ('val', 'GAM', 'GAM' )";
query2 = "insert into tabla(cedula, actividad, mercado) "
+ " values ( ? , ? , ? )";

PreparedStatement pstmt = conexion.prepareStatement(query2);
pstmt.setString(1, n.getCedula());
//the rest of the sets of the statement continue here from 1 to 13
pstmt.executeUpdate();

conexion.createStatement().execute(query1);

关于java - org.postgresql.util.PSQLException : ERROR: syntax error near «, » 在 Java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19073542/

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