Postgresql: синтаксическая ошибка в и около нуля - PullRequest
0 голосов
/ 08 октября 2019

У меня есть веб-приложение, которое подключено к postgresql. Я пытаюсь получить данные из базы данных с подготовленным оператором и постоянно получать синтаксическую ошибку, равную или близкую к нулю.

Ниже приведен мой фрагмент кода для запроса:

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. пожалуйста, посмотрите на это.

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Я указал позицию ошибки 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

(Точка с запятой ; в конце лишняя.)

0 голосов
/ 08 октября 2019

o.room_id =? если ? является нулевым, так что вы должны проверить "o.room_id является нулевым". Вы можете проверить это с помощью встроенного, если

...