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节和