Java Postgresql:在和接近null处出现语法错误

Java Postgresql:在和接近null处出现语法错误,java,postgresql,jdbc,prepared-statement,Java,Postgresql,Jdbc,Prepared Statement,我有一个连接到postgresql的web应用程序。我试图用一个准备好的语句从数据库中获取数据,并不断地得到null或接近null的语法错误 以下是我的查询代码片段: PreparedStatement pstmt=conn.prepareStatement(“从房间1选择*”+“加入房间2 op”+ “在o.room_id=op.room_id”+“加入Rooms3p”+ “在op.person\u id=p.person\u id上”+ “其中o.room_id=?”+ “订单由o.plat

我有一个连接到postgresql的web应用程序。我试图用一个准备好的语句从数据库中获取数据,并不断地得到null或接近null的语法错误

以下是我的查询代码片段:

PreparedStatement pstmt=conn.prepareStatement(“从房间1选择*”+“加入房间2 op”+
“在o.room_id=op.room_id”+“加入Rooms3p”+
“在op.person\u id=p.person\u id上”+
“其中o.room_id=?”+
“订单由o.plate_ORDER ASC;”){
//代码的其余部分
当检查测试数据库时,此查询工作正常,但当在prepared语句中使用它时,它会给出错误信息

Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "null"
position: 54

根据一些研究,我认为问题出在我的查询上,这也是我第一次编写Postgresql查询。请看一看。

o.room\u id=?if?为空,所以你必须检查“o.room\u id为空”。你可以用内联if检查这一点。

我用
***
指示了错误位置54:

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
我不完全理解错误消息,但是 op.room_id可能出现空值

奇怪的错误IMHO,但尝试左连接

SELECT o.*, op.*, p.* FROM rooms1 o
LEFT JOIN rooms2 op ON o.room_id = op.room_id
LEFT JOIN rooms3 p  ON op.person_id = p.person_id
WHERE o.room_id = ?
ORDER BY o.plate_order ASC

(结尾的分号
是多余的。)

您是否绝对确定您的所有参数都设置为合理的值?在这里重复Thorbjørn Ravn Andersen提出的问题,只是为了澄清-您是否在执行准备好的语句之前为其设置参数值(例如“pstmt.setString(1,“RM123”);)?您是否可能发送空值?是的,我非常确定。您应该能够通过搜索文本日志将实际查询发送到服务器。此错误表明查询结构错误,而不是发送到准备好的语句的值(我相信一旦准备好语句,就不可能导致此错误)。您应该能够从pg_catalog.pg_settings中的名称('data_directory','log_filename','log_directory')中的
选择string_agg(设置,'/'按名称排序)设置的位置中找到日志
您可能没有执行您认为是的查询。查看PostgreSQL server的日志文件,查找带有错误的查询,而不必对客户端库进行混淆。如果其中一个联接列包含空值,则不会导致错误;它只会不联接这些行,因此左联接将无法解决问题它。@ukaszKamiński的确,我已经在想,
SELECT*
是否扩展到实际列,位置54是否指向某个空值。不幸的是,Postgresql从来没有太多经验。不太可能解决这个问题,因为使用
=
运算符将列与空值进行比较虽然没有意义,但不会产生结果在错误消息中输入t。