无法在C应用程序中执行sqlite3
我正在尝试使用C应用程序显示firefox和chrome的历史记录。对于chrome的历史记录,它工作得很好,因为Sql命令不包含符号,但对于chrome,我的Sql请求包含符号,因此此函数不给我结果。它给我错误: 没有这样的表格:moz_History访问 或者,当我从命令提示符测试这个请求时,它工作得很好。我认为问题在于sql请求包含(41;符号。 Rq:对于chrome历史,它工作得很好。callbackprefox是用来显示结果的函数 我使用windows和代码块作为IDE。当我从sqlite_master执行select name时无法在C应用程序中执行sqlite3,c,sqlite,C,Sqlite,我正在尝试使用C应用程序显示firefox和chrome的历史记录。对于chrome的历史记录,它工作得很好,因为Sql命令不包含符号,但对于chrome,我的Sql请求包含符号,因此此函数不给我结果。它给我错误: 没有这样的表格:moz_History访问 或者,当我从命令提示符测试这个请求时,它工作得很好。我认为问题在于sql请求包含(41;符号。 Rq:对于chrome历史,它工作得很好。callbackprefox是用来显示结果的函数 我使用windows和代码块作为IDE。当我从sql
system()
启动一个单独的shell,该shell在命令执行后终止,因此不会更改实际程序的当前目录
您应该手动查找目录名,并将其包含在数据库文件名中。您确定您的代码打开了正确的数据库吗?是的,问题是,当我在命令提示符中复制并粘贴相同的sql命令时,它工作得很好。这不可能是环境或库的问题,因为sqlite3在显示chrome History时起作用。如果您说是,但您的代码报告它在SQL中找不到表,您已经通过在命令行工具中运行SQL证明了该表的存在。尝试将SQL替换为“从sqlite_master中选择名称”,并打印结果以查看代码查找的表抱歉,它会显示此信息。moz_历史参观,moz_地方存在。我把图像添加到帖子中
int DisplayFirefoxHistory()
{
sqlite3 *db;
char *err_msg = 0;
system("cd C:/Users/******/AppData/Roaming/Mozilla/Firefox/Profiles/*.default");
int rc = sqlite3_open("places.sqlite", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Cannot open database: %s\n",sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char *sql = "select url,datetime(visit_date/1000000-11644473600,'unixepoch') from moz_historyvisits,moz_places order by visit_date desc";
rc = sqlite3_exec(db, sql, callbackFirefox, NULL, &err_msg);
if (rc != SQLITE_OK ) {
fprintf(stderr, "Failed to select data\n");
fprintf(stderr, "SQL error: %s\n", err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
return 1;
}
sqlite3_close(db);
return 0;
}
system("cd C:/Users/******/AppData/Roaming/Mozilla/Firefox/Profiles/*.default");