【发布时间】:2020-02-05 18:10:00
【问题描述】:
我有一个连接到 postgresql 的 Web 应用程序。我正在尝试使用准备好的语句从数据库中获取数据,并在 null 或附近不断出现语法错误。
以下是我的查询代码sn-p:
PreparedStatement pstmt = conn.prepareStatement("SELECT * "+ "FROM rooms1 o " + "JOIN rooms2 op" +
" ON o.room_id = op.room_id " +"JOIN rooms3 p " +
" ON op.person_id = p.person_id " +
"WHERE o.room_id = ? " +
" ORDER BY o.plate_order ASC;")) {
//Rest of code
这个查询在检查测试数据库时工作正常,但是当在准备好的语句中使用它时,它会给出错误
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "null"
position: 54
根据一些研究,我认为问题出在我的查询上,这也是我第一次编写 Postgresql 查询。请看一下。
【问题讨论】:
-
您确定所有参数都设置为合理值吗?
-
重述 Thorbjørn Ravn Andersen 提出的问题,只是为了澄清 - 您是否在执行前为准备好的语句设置了参数值(例如' pstmt.setString(1,"RM123"); ' ) ?你可能会发送一个空值吗?
-
是的,我很确定。
-
您应该能够通过搜索文本日志将实际查询发送到服务器。此错误表明查询结构错误,而不是发送到准备好的语句的值(我相信一旦准备好语句就不可能导致此错误)。您应该能够在
SELECT string_agg(setting, '/' ORDER BY name) FROM pg_catalog.pg_settings WHERE name IN('data_directory', 'log_filename', 'log_directory');设置的位置找到日志 -
您可能没有执行您认为的查询。在 PostgreSQL 服务器的日志文件中查找有错误的查询,而不会妨碍客户端库的混淆。
标签: java postgresql jdbc prepared-statement