SQLite3 在 c++ 中输出 SELECT 上的空列表
SQLite3 in c++ outputing empty list on SELECT
我目前正在使用 SQLite3 处理 c++,一切正常,我可以在表中添加东西,但是当我做一个SELECT * FROM myTable;
时,它会返回我(null)
...... 变量rc
sqlite3 *db;
char *zErrMsg;
int rc;
std::string sql = "SELECT * FROM users;";
char csql[sql.size()+1];
strcpy(csql, csql.c_str()); // String to char*
rc = sqlite3_exec(db, csql, callback, 0, &zErrMsg); // rc = 21 Error
...
是21..根据 https://www.sqlite.org/c3ref/c_abort.html,这意味着我"错误地使用了库"。然后我用python和在线sql检查了同一个.db
文件,它输出了我什么是好的。
如果有人可以帮助我并解释我做错了什么以及如何纠正它? 谢谢!
附言: 这是我的函数 addUser,以防问题出在 add..
bool addUser(std::string username, std::string password){
char cpassword[password.size()+1];
strcpy(cpassword, password.c_str());
std::string shashedP = hashPass(cpassword); // hashPass returns std::string
std::string sql = "INSERT INTO users (username, passw) VALUES ('" + username + "', " + shashedP + ");";
char csql[sql.size()+1];
strcpy(csql, sql.c_str());
rc = sqlite3_exec(db, csql, callback, 0, &zErrMsg); // rc = SQLITE3_OK = 0 everytime
...
那是...奇怪。。。代码(另外,如前所述,C++不是真正有效的,尽管一些编译器确实支持 C 样式的 VLA 作为扩展(。正常的工作流是对任何返回行的内容使用预准备语句,或者以占位符的形式获取用户提供的参数。sqlite3_exec()
通常只适用于创建表,以及没有结果且没有运行时定义的参数传递给查询的情况。
例如:
std::string query = "SELECT foo FROM bar WHERE name = ?";
std::string name = "Bob";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, query.c_str(), query.size(), &stmt, nullptr) != SQLITE_OK) {
// Error reporting and handling
}
sqlite3_bind_text(stmt, 1, name.c_str(), name.size(), SQLITE_STATIC);
while (sqlite3_step(stmt) == SQLITE_ROW) {
int foo = sqlite3_column_int(stmt, 0);
// Do stuff with the current row's foo
}
sqlite3_finalize(stmt);
更多阅读。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- SQLite3 在 c++ 中输出 SELECT 上的空列表
- 我们如何从select()函数中获取套接字列表