【问题标题】:Additional, unspecified fields being added to a query将附加的未指定字段添加到查询中
【发布时间】:2010-01-06 14:57:40
【问题描述】:

我有一些查询正在使用 PostgreSQL 数据库和旧版本 JDataStore 的某些部分(用于与数据库交互的部分)的 java 程序中运行。有时,查询会从一次查询的执行中两次发送到数据库。更奇怪的是,发送的第一个查询与第二个略有不同,而且是不正确的。例如:

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

请注意该查询开头的两个字段,以及缺少单词“as”,与此相比:

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

我们有一组我们使用的查询列表,而第一个查询甚至不在该列表中。什么可能导致这种情况? (对不起,我没有提供代码,但在这种情况下这样做是不可行的。)

【问题讨论】:

    标签: java sql postgresql


    【解决方案1】:

    查询不会像那样“改变”。我确定没有在以太中创建字段名称“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";
    

    【讨论】:

    • 是的,这也是我的想法。但是,我不是 SQL 专家。 1. 查询在源代码中存储为字符串(整个事情 - 它根本不是在代码中构造的)。我将字符串直接传递给 QueryDataSet 对象,然后在其上运行 executeQuery()(这些来自 JDataStore;我不希望任何人对此了解很多) 2. 我在 SQL 服务器的日志文件中看到这两个查询。
    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2019-12-12
    • 2019-07-23
    • 2021-11-16
    • 2021-09-10
    相关资源
    最近更新 更多