0

我正在编写一个小应用程序(登录掩码)来熟悉 SQLite3 的使用。现在我对 sqlite3_bind_text() 的正确使用有疑问。我创建了一个只有 1 行的小型数据库。在这部分代码中,我想将用户输入绑定到变量并将其绑定到语句。传递的用户输入由 getline(cin,variable) 函数提供。

我的问题:当我尝试使用 bind 方法时,我得到一个即时的“错误库使用”。结果总是21。API文档我已经看了好几遍了,但最后一部分明显看不懂。

有人可以告诉我如何正确使用此功能吗?我检查了我的列类型,它们是“Text NOT NULL”。

int Login::check_login(string username, string password) {
int errcode = 0;
string query = "Select a_username,a_password from t_user where a_username = ? and a_password = ?;";
sqlite3_stmt *createStmt;

errcode = sqlite3_prepare_v2(datab->get_db(), query.c_str(), query.size(), &createStmt, NULL);

if (!errcode)
    throw runtime_error("Failed! Can not prepare statement DB.");

errcode = sqlite3_bind_text(createStmt, 1, password.c_str(), -1, SQLITE_STATIC); // Always 21 because of false library use

//there is more code but i think this should be enough

PS我已经用谷歌搜索了这两天,没有找到解决方案/简单解释我的问题。

4

1 回答 1

2

我认为你的调用sqlite3_prepare_v2()失败并且没有准备有效的语句(你没有得到异常,不是吗?),但是错误检查中有一个错字。

当 sqlite3_* 函数成功时,它返回SQLITE_OKwhich is 0。所以正确的错误检查是:

if (errcode)
    throw runtime_error("Failed! Can not prepare statement DB.");

这就是为什么sqlite3_bind_text()也失败了。

于 2013-09-17T17:36:13.263 回答