我编写了一个用户定义的函数来计算给定字符串的校验和。我需要将计算出的哈希值插入表中。 我使用了以下方法
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 数据库:源码
感谢您的帮助
答案 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));"