簡體   English   中英

如何使用C在sqlite3中使用參數化查詢更新列?

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

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