2010-01-06 56 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

相关问题