正确使用sqllite3_bin_text

时间:2013-09-17 17:15:05

标签: c++ sqlite

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

我的问题: 当我尝试使用bind方法时,我立即获得“False Library use”。结果总是21.我已多次阅读API documentation,但我显然不明白最后一部分。

有人可以告诉我如何正确使用此功能吗? 我检查了我的列类型,它们是“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

P.S。 我用Google搜索了这两天,发现没有解决方案/简单解释我的问题。

1 个答案:

答案 0 :(得分:2)

我认为你对sqlite3_prepare_v2()的调用失败并且没有准备有效的声明(你没有得到例外,不是吗?),但错误检查中有错字。

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

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

这就是sqlite3_bind_text()也失败的原因。