在Sqlite的Insert命令中调用用户定义的函数

时间:2016-06-08 12:02:59

标签: sql c 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语句:没有这样的列:msg”。 在insert命令中调用UDF的正确方法是什么。

平台:Linux 语言:C 数据库:源码

感谢您的帮助

2 个答案:

答案 0 :(得分: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(对于自动增量值),则不应使用参数。

您的哈希函数不需要长度参数。

答案 1 :(得分:1)

msg是C程序级变量。在sql命令中,您不能引用C变量,您必须将其内容作为字符串文字插入到sql语句中。这同样适用于len变量。

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

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