簡體   English   中英

SQLite中的語法錯誤(C綁定)

[英]Syntax error in SQLite (C bindings)

我最近收到此錯誤,無法消除它。 令我感到困惑的是,因為完全相同的請求(復制粘貼)在CLI中可以像charm一樣工作 我正在使用Qt應用程序中的C綁定(后來我才發現存在用於SQL數據庫的Qt包裝器類)。

有問題的請求如下:

NSERT INTO classes(score,classe) VALUES((SELECT avg((julianday(arrivee)-julianday(debutCourse))/moyenne) FROM coureurs NATURAL JOIN resultats NATURAL JOIN courses NATURAL JOIN categories WHERE classe='4èmeB' AND moyenne IS NOT NULL),'4èmeB');

錯誤是:

“'4èmeB'”附近:語法錯誤

我在這里使用三個表格,分別是課程,課程(成績),成績(結果),課程(競賽),類別。

對於每個班級,我想計算以下內容:平均值(跑步者的時間/其類別的平均時間)。 出發時間存儲在課程(競賽)表內,到達時間存儲在結果(結果)表內,類別的平均時間存儲在category.moyenne中。 如果您有一種更優雅的方式來執行這樣的請求,我將很高興聽到它。 但是,我想對這里發生的事情進行解釋。 這是因為UTF-8字符嗎? 在其他地方似乎並不是問題。

如果有幫助,這里是相關的C ++代碼:

void database::voidQuery(QString query)
{
    sqlite3_stmt *res;
    int rc =sqlite3_prepare_v2(db,query.toStdString().c_str(),query.length(),&res,NULL);
    if(rc != SQLITE_OK){
        fprintf(stderr, "Error in voidquery : %s in the request %s\n", sqlite3_errmsg(db),query.toStdString().c_str());
        return;
    }
    sqlite3_step(res);
    sqlite3_finalize(res);
}

連同調用代碼:

for (QStringList::iterator it = classes.begin();it != classes.end(); ++it)
      {
          QString query("INSERT INTO classes(score,classe) "
                        "VALUES(("
                            "SELECT avg((julianday(arrivee)-julianday(debutCourse))/moyenne) "
                            "FROM coureurs NATURAL JOIN resultats NATURAL JOIN courses NATURAL JOIN categories "
                            "WHERE classe='%1' and moyenne is not null),'%2');");
          voidQuery(query.arg(*it).arg(*it));
      }

classes是一個QStringList,其中包含先驗查詢的不同行。

提前致謝 ! (我希望這不是一個小問題;我花了很多時間來調試它)。

采用

INSERT INTO classes (score,classe) 
SELECT avg((julianday(arrivee)-julianday(debutCourse))/moyenne), '4èmeB'
FROM coureurs 
NATURAL JOIN resultats 
NATURAL JOIN courses 
NATURAL JOIN categories 
WHERE classe='4èmeB' 
AND moyenne IS NOT NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM