我遇到的问题是我的5个测试行中只有一个会用C ++输出。我的代码是:
#include <cstdio>
#include <sqlite3.h>
#include <windows.h>
#include <wincrypt.h>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
/*Definitions*/
sqlite3 *db;
void *arg;
char *err;
const char* stmt = "SELECT * from table";
/*End of Definitions*/
int exec(void *arg, int argc, char **argv, char **column) {
int i;
for(i = 0; i < argc; i++) {
cout << column[i] << ": " << argv[i] << endl;
}
cout << "------" << endl;
}
int main() {
int rc = sqlite3_open("test.sqlite", &db); /*Open db "test.sqlite"*/
if(!rc) {
while(true) {
sqlite3_exec(db, stmt, exec, arg, &err);
if(err) {
break;
}
}
}
/*Ending Stuffz (NOTHING BEYOND THIS POINT)*/
cin.get();
return 0;
}
我没有得到任何错误;它纯粹只是输出第一行。感谢任何帮助。谢谢。
答案 0 :(得分:1)
只需在exec函数的结尾处返回
说明:
在函数'exec'中,当它什么都不返回时,数据库服务器的行为就像该函数被某种方式终止(就像某种东西破坏了该函数并产生了错误),因此它只是停止发送数据,因为回调函数因错误而终止....因此,当我们返回0时,我们说函数“ exec”正常工作,因此它会继续发送数据...如果您返回任何其他整数,它将像对待错误终止的函数一样处理它并停止发送数据。我遇到了同样的问题,我通过使回调函数(exec)返回0来解决了这个问题。