[英]How do I update a column with parameterized queries, in sqlite3 using C?
我有一行已初始化為0。我想在每執行一次操作時更新此行的值。
char *text="Hello" // Hello is the name of the field, which has one row
char *sql = "UPDATE Candidate SET ?=?+1;";
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
if (rc == SQLITE_OK) {
rc = sqlite3_bind_text( res, 1,text,-1,0);
rc = sqlite3_bind_text( res, 2,text,-1,0);
}
如何使用參數化查詢更新列?
您不能將表或列名稱綁定到SQL參數值。 從SQLite 文檔
6.綁定參數和重用准備好的語句
。 。 。
SQLite允許在允許使用字符串文字,數字常量或NULL的任何地方使用參數。 (參數不能用於列名或表名。)參數采用以下形式之一:
•?
•?NNN
•:AAA
•$ AAA
•@AAA在上面的示例中,NNN是整數,AAA是標識符。 參數最初的值為NULL。 在第一次調用sqlite3_step()之前或在sqlite3_reset()之后立即調用,應用程序可以調用sqlite3_bind()接口將值附加到參數。 每次調用sqlite3_bind()都會覆蓋同一參數上的先前綁定。
允許應用程序預先准備多個SQL語句並根據需要對其進行評估。 未完成的准備好的語句的數量沒有任意限制。 一些應用程序在啟動時會多次調用sqlite3_prepare()來創建他們將需要的所有准備好的語句。 其他應用程序保留最近使用的准備好的語句的緩存,然后在可用時將准備好的語句從緩存中重用。 另一種方法是僅在循環中使用已准備好的語句時再使用它們。
如果要在這種情況下使用變量列名,則必須在運行時動態構造查詢字符串,這不在此問題的范圍內; 這樣的事情可能會起作用,但是如果您打算經常這樣做,那么值得花時間編寫一個字符串替換函數:
#include <string.h>
int main(int argc, char *argv[]) {
char buffer[256];
char *field = "Hello";
strcpy(buffer, "UPDATE Candidate SET ");
strcat(buffer, field);
strcat(buffer, " = ");
strcat(buffer, field);
strcat(buffer, " + 1;");
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.