以编程方式修改SQLite数据库而不使用SQL

时间:2014-08-29 02:21:41

标签: sql c sqlite

我正在使用C API到SQLite,修改数据库的唯一方法似乎是将SQL语句作为字符串。例如,文档显示了一个代码示例,它只是通过exec函数调用将命令行字符串传递给引擎:

rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);

我不想构建字符串并将它们传递给翻译人员,不仅仅是因为安全问题,还因为我不想在一起纠缠字符串和转义序列。

是否有SQLite函数允许我直接操作数据库而不创建SQL字符串?

2 个答案:

答案 0 :(得分:1)

sqlite_exec仅支持单个SQL字符串。 如果你真的想要使用它,你可以安全地将字符串和转义序列与sqlite3_mprintf拼凑在一起。

为避免将cobbling字符串和转义序列放在一起,请使用预处理语句和参数绑定:

sqlite3_stmt *stmt;
const char *sql = "UPDATE MyTable SET Name = ? WHERE ID = ?";
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc == SQLITE_OK) {
    sqlite3_bind_text(stmt, 1, "Tyler Durden", -1, SQLITE_TRANSIENT);
    sqlite3_bind_int (stmt, 2, 1655700);
    rc = sqlite3_step(stmt);
    if (rc != SQLITE_DONE)
        ; // error
    sqlite3_finalize(stmt);
}

答案 1 :(得分:0)

SQLite专门设计为SQL数据库,这意味着您使用SQL作为语言与数据库交互并让数据库关注任何内部,优化等.SQL被定义为独立于较低级别的语言实现而不是实现的API。

但也许您的要求根本不需要SQL数据库。在这种情况下,有几个更简单的数据库(如BerkeleyDB),它只为一个键存储一个值,并且具有多种编程语言的API。