2017-07-03 16 views
0

我試圖顯示使用C應用程序的Firefox和鉻的歷史記錄。對於鉻的歷史記錄,它工作正常,因爲Sql命令不包含符號,但與鉻我的SQL請求包含符號,所以這個功能並沒有給我造成。它給我的錯誤:無法在C應用程序中執行sqlite3

沒有這樣的表:moz_historyvisits

或者,當我測試通過命令該請求促使它工作得很好。我認爲問題是sql請求包含(_)符號。 Rq:對於鉻歷史它運作良好。 CallbackFirefox的功能是顯示結果 我使用Windows和代碼塊作爲IDE。當我從SQLITE_MASTER enter image description here

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; 
    } 
+1

你確定你的代碼打開了正確的數據庫嗎? –

+0

是的,當我在命令提示符中複製並粘貼相同的sql命令時,它的效果很好。它不能成爲環境或庫的問題,因爲sqlite3在顯示鉻歷史記錄時工作 –

+1

你說是的,但是你的代碼報告說你無法在你的SQL中找到你已經證明存在的表,這是通過在命令行工具中運行SQL來實現的。嘗試用「SELECT name FROM sqlite_master」代替你的SQL並打印出結果,看看你的代碼找到了哪些表 –

回答

0
system("cd C:/Users/******/AppData/Roaming/Mozilla/Firefox/Profiles/*.default"); 

system()開始執行該命令後終止一個單獨的shell執行select名稱,所以這不會改變你的實際程序的當前目錄。

您應該手動查找目錄名稱,並將其包含在數據庫文件名中。

相關問題