2016-06-08 47 views
0

我寫了一個用戶定義的函數來計算給定字符串的校驗和。我需要將計算出來的散列值插入表中。 我用下面的方法在Sqlite的插入命令中調用用戶自定義函數

char msg[] = "Testing of the hash" 
len = strlen(msg) 
char *sql = "INSERT INTO TestHash (id,CheckSum) VALUES (?,hash(msg,len));" 
sqlite3_prepare_v2(db, sql, -1, &res, 0); 
sqlite3_step(res) 

但sqlite的拋出一個錯誤「無法準備插入SQL語句:沒有這樣的列:味精」。 在插入命令中調用UDF的正確方法是什麼?

平臺:Linux 語言:C 數據庫:sqlite的

感謝您的幫助提前

回答

2

您已經使用了parameter的ID值。 執行相同的其他兩個值:

const char *sql = "INSERT INTO TestHash (id,CheckSum) VALUES (?,hash(?,?));" 
/* error handling omitted */ 
rc = sqlite3_prepare_v2(db, sql, -1, &res, NULL); 
sqlite3_bind_int(res, 1, ...); 
sqlite3_bind_text(res, 2, msg, len, SQLITE_TRANSIENT); 
sqlite3_bind_int(res, 3, len); 
rc = sqlite3_step(res); 

如果ID值應爲NULL(對於自動增量值),你不應該使用它的參數。

你的散列函數不應該需要長度參數。

+0

你的方法和Shadow的方法都有效。哪個更好。 – Vikas

+0

與sqlite_binding_text有問題,第二個參數發送了錯誤的列號 – Vikas

1

msg是一個C程序級別的變量。在sql命令中,您不能引用C變量,您必須將其內容作爲字符串文字插入到sql語句中。這同樣適用於len變量。

你基本上需要你的C程序中生成以下字符串:

char *sql = "INSERT INTO TestHash (id,CheckSum) VALUES (?,hash('Testing of the hash',19));"