Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用Postgres存储函数SQL错误_Java_Postgresql_Jdbc_Jdb - Fatal编程技术网

Java 调用Postgres存储函数SQL错误

Java 调用Postgres存储函数SQL错误,java,postgresql,jdbc,jdb,Java,Postgresql,Jdbc,Jdb,我正在调用存储函数,如下所示: PreparedStatement deleteAll=connection.prepareStatement("{ call delete_all_data() }"); deleteAll.execute(); 在日志中我看到: 15:16:31,950 WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: 42601 15:16:31,950 ERROR SqlExceptionHelper:144

我正在调用存储函数,如下所示:

PreparedStatement deleteAll=connection.prepareStatement("{ call delete_all_data() }");
deleteAll.execute();
在日志中我看到:

15:16:31,950  WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: 42601
15:16:31,950 ERROR SqlExceptionHelper:144 - ERROR: syntax error at or near "{"
  Position: 1

prepareStatement有什么问题?

更改
连接。prepareStatement
(需要SQL)到
连接。prepareCall
。这很可能是您需要的唯一更改,因为
CallableStatement
PreparedStatement
更改
连接。prepareStatement
(需要SQL)到
连接。prepareCall
。这很可能是您需要的唯一更改,因为
CallableStatement
PreparedStatement

我使用prepareCall调用存储过程

String SQL = "{call delete_all_data()}";
cstmt = conn.prepareCall (SQL);

我使用prepareCall调用存储过程

String SQL = "{call delete_all_data()}";
cstmt = conn.prepareCall (SQL);

存储过程应该使用
CallableStatement
connection.prepareStatement(“选择delete\u all\u data()”)
就足够了。无
CallableStatement
needed@LuiggiMendozaJDBC驱动程序还应该支持带有
语句
PreparedStatement
的调用转义。只要存储过程没有
OUT
参数(
PreparedStatement
)或参数占位符(用于
语句
),就应该可以这样做。然而,实际上大多数驱动程序只支持使用
CallableStatement
。存储过程应该使用
CallableStatement
connection.prepareStatement(“选择删除所有数据()”)
就足够了。无
CallableStatement
needed@LuiggiMendozaJDBC驱动程序还应该支持带有
语句
PreparedStatement
的调用转义。只要存储过程没有
OUT
参数(
PreparedStatement
)或参数占位符(用于
语句
),就应该可以这样做。然而在实践中,大多数驱动程序只支持
CallableStatement
。请参阅我对问题本身的评论,尽管这可能是解决方案,但它并不符合规范:调用转义也应该在
语句
PreparedStatement
上得到支持。请参阅:JDBC 4.2的第6.4节,并参阅我对问题本身的评论,尽管这可能是解决方案,但它并不符合规范:调用转义也应该在
语句和
PreparedStatement
上得到支持。参见:JDBC 4.2第6.4节和