[英]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.