SQLite 语法在 "S" 附近不正确
SQLite syntax incorrect near "S"
我已经使用 SQLite + C++ 做一个项目一段时间了,但我似乎无法让它工作。现在,我的代码没有像预期的那样在控制台中显示任何内容。我得到的错误是syntax incorrect near "S"
.我的代码是:
/*Definitions*/
sqlite3 *db;
sqlite3_stmt *statement;
void *arg;
char *err;
const char stmt = *"SELECT * from table";
/*End of Definitions*/
int exec(void *arg, int argc, char **argv, char **column) {
while(true) {
int i = 0;
for(i < argc;) {
cout << column[i] << ": " << argv[i] << endl;
i++;
}
cout << "------" << endl;
}
}
int main() {
int rc = sqlite3_open("test.sqlite", &db); /*Open db "test.sqlite"*/
if(!rc) {
sqlite3_exec(db, &stmt, exec, arg, &err);
}
/*Ending Stuffz (NOTHING BEYOND THIS POINT)*/
cin.get();
return 0;
}
数据库包含此表中的数据,但不会显示。我让它在某一点工作,但它只工作了一行然后停止了。我很愚蠢,忽略了备份,现在当我试图修复它时,我陷入了困境。任何帮助,不胜感激。
问题从这一行开始:
const char stmt = *"SELECT * from table";
这将创建一个char
,其值'S'
从字符串文本中复制,因为像这样应用于字符串文本的星号只会获取char const[]
的第一个字符,而忽略其余字符。
然后,在此处向 SQLite 提供char
对象的地址:
sqlite3_exec(db, &stmt, exec, arg, &err);
该函数需要char const*
作为其第二个参数。尽管其文档没有明确说明,但它自然期望指向以 null 结尾的char
数组的指针,而不是指向单个char
。
因此,您在这里遇到了未定义的行为,因为该函数一直在寻找终止' '
,进入不允许访问的内存。
您也很不幸,因为显然发生的事情不是崩溃从而向您显示错误的位置,而是在'S'
之后恰好存在一个可访问的' '
。
因此,您有效地将单个字母"S"作为SQL字符串传递,并且该函数对此进行了正确的抱怨。
治愈很容易:
const char* stmt = "SELECT * from table";
[...]
sqlite3_exec(db, stmt, exec, arg, &err);
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- 为什么除非我使用 cout,否则我的值不正确?
- 计算幂级数的数学结果不正确
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- SQLite 语法在 "S" 附近不正确