【发布时间】:2017-07-03 22:57:21
【问题描述】:
我正在尝试使用 C 应用程序显示 firefox 和 chrome 的历史记录。对于 chrome 的历史记录,它运行良好,因为 Sql 命令不包含符号,但使用 chrome 我的 sql 请求包含符号,所以这个函数没有t 给我结果。它给我错误:
没有这样的表:moz_historyvisits
或者,当我从命令提示符测试此请求时,它运行良好。我认为问题在于 sql 请求包含 (_)symbols 。 Rq:对于 chrome 历史,它运行良好。 CallbackFirefox 是用来显示结果的功能 我使用 windows 和 Code blocks 作为 IDE。当我从 sqlite_master 执行选择名称时
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;
}
【问题讨论】:
-
您确定您的代码打开了正确的数据库吗?
-
是的,当我在命令提示符中复制和粘贴相同的 sql 命令时,它运行良好的问题。这不是环境或库的问题,因为 sqlite3 在显示 chrome 历史记录时有效
-
您说是,但您的代码报告它无法在您的 SQL 中找到您通过在命令行工具中运行 SQL 证明存在的表。尝试用“SELECT name FROM sqlite_master”替换您的 SQL 并打印出结果以查看您的代码正在查找哪些表
-
对不起,它显示给我这个。 moz_historyvisits,moz_places 存在。我在帖子中添加图片