Дополнительные неопределенные поля, добавляемые в запрос - PullRequest
0 голосов
/ 06 января 2010

У меня есть несколько запросов, выполняемых в java-программе, которая использует базу данных PostgreSQL и некоторые части старой версии JDataStore (части, используемые для взаимодействия с базой данных). Иногда запросы отправляются в базу данных дважды с одного выполнения запроса. Еще более странным является то, что первый отправленный запрос немного отличается от второго и является неправильным. Например:

First Query (incorrect)
SELECT b."construct_id", c."instance_id", a.SymbolName, c.Address AddressDecimal,
       c.Description, b.ConstructName, a.DeclarationType, a.Symbol_id,
       a.SymbolType_id, a.Construct_id, a.Leaf 
FROM tblSymbolDeclaration a, tblLanguageConstructName b, tblSymbolInstance c  
WHERE a.Construct_id = b.Construct_id and a.Symbol_id = c.Symbol_id
  and a.DeclarationType = 1 and a.Root = 1

Обратите внимание на два поля в начале этого запроса и отсутствие слова «как» по сравнению с этим:

Second Query (correct)
SELECT a.SymbolName, c.Address as AddressDecimal, c.Description, 
       b.ConstructName, a.DeclarationType, a.Symbol_id, a.SymbolType_id,
       a.Construct_id, a.Leaf 
FROM tblSymbolDeclaration a, tblLanguageConstructName b, tblSymbolInstance c 
WHERE a.Construct_id = b.Construct_id and a.Symbol_id = c.Symbol_id 
  and a.DeclarationType = 1 and a.Root = 1

У нас есть установленный список запросов, которые мы используем, и первого запроса даже нет в этом списке. Что может вызвать это? (Извините, что я не предоставил код, но в этой ситуации это невозможно).

1 Ответ

0 голосов
/ 06 января 2010

Запрос не просто так "изменится". Я уверен, что имя поля "instance_id" не создается в эфире. Я думаю, что это ошибка в построении самого запроса.

  1. Как запрос строится и передается в базу данных?
  2. Где именно вы видите «неправильный» запрос?

Хорошо, снимите в темноте, но попробуйте изменить свой запрос на это только ради его изменения. Посмотрите, что ваш сервер говорит вам тогда.

String myQuery = ""
+ "SELECT a.symbolname, "
+ "       c.address AS addressdecimal, "
+ "       c.DESCRIPTION, "
+ "       b.constructname, "
+ "       a.declarationtype, "
+ "       a.symbol_id, "
+ "       a.symboltype_id, "
+ "       a.construct_id, "
+ "       a.leaf "
+ "FROM   tblsymboldeclaration a "
+ "       INNER JOIN tbllanguageconstructname b "
+ "         ON a.construct_id = b.construct_id "
+ "       INNER JOIN tblsymbolinstance c "
+ "         ON a.symbol_id = c.symbol_id "
+ "WHERE  a.declarationtype = 1 "
+ "       AND a.ROOT = 1";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...