2010-01-06 59 views
0

我有一些查詢在使用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 

我們查詢的一組列表中,我們使用,並且第一個查詢甚至不在該列表中。什麼會造成這種情況? (對不起,我沒有提供代碼,但在這種情況下這樣做是不可行的。)

回答

0

查詢不會像這樣「改變」。我確定字段名稱「instance_id」沒有在ether中創建。我認爲這在查詢本身的構造中是一個錯誤。

  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"; 
+0

是的,那些也是我的想法。然而,我不是SQL專家。 1.查詢以源代碼中的字符串形式存儲(整個事情 - 根本沒有在代碼中構建)。我直接將字符串傳遞給一個QueryDataSet對象,然後在其上運行executeQuery()(這些來自JDataStore;我不希望任何人知道太多) 2.我在SQL服務器的日誌文件中看到兩個查詢。 – Chris 2010-01-06 15:33:20

+0

你的編輯似乎已經奏效,但我不明白爲什麼。 – Chris 2010-01-06 15:59:39

相關問題