2015-01-20 77 views
3

我一直在努力讓這個工作太久。我剛開始進入PhoneGap/Cordova。我得到了演示應用程序的運行,安裝了所有官方插件,並添加了這個SQLite插件開始工作:https://github.com/brodysoft/Cordova-SQLitePluginPhoneGap - 閱讀預先打包的sqlite數據庫

但是,我希望插件讀取預打包的數據庫。簡而言之,創建一個脫機工作的應用程序,並且無需在第一次運行時下載SQLite數據庫。

我一直在爲Android開發相當長的一段時間,解決方案是在資產文件夾中部署一個只讀數據庫文件,並在第一次運行時將數據庫文件複製到另一個文件夾中,在那裏我可以讀取/按我的意願寫。

所以我做了一點研究,並意識到它應該與PhoneGap相同。將二進制SQLite數據庫放置在某處,以便在構建時將其與應用程序打包在一起。然後簡單地用我在這裏鏈接的SQLite插件加載它。

最後,這個問題!爲了能夠讀取與應用程序一起打包的文件,我必須採取哪些確切步驟?

  1. 我應該在哪裏放置我的二進制文件以確保它被打包到應用程序中?
  2. 我應該如何初始化File API?我應該問使用window.requestFileSystem持久性存儲嗎?或者我應該使用window.resolveLocalFileSystemURL作爲DirectoryEntry獲取一些(不知道哪個)目錄(cordova.file.applicationDirectory)?如果是這樣,我應該使用哪些EXACT參數?我主要是指這個:https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
  3. 如何讀取打包文件?使用window.resolveLocalFileSystemURL與正確的文件夾?那麼參數應該是什麼?
  4. 如果我到了這一步,文件複製應該可以正常工作。只需將只讀cordova.file.applicationDirectory複製到可讀寫的cordova.file.dataDirectory即可。對?

我知道這些問題可能是非常基本的,但我無數的嘗試都是失敗的,我沒有找到一個解釋這個問題的教程(相信我,我用Google搜索了一下)。此外,文件似乎不足。

只使用WebSQL數據庫並加載數據,使用s ***加載INSERT s的數據庫不是一個可行的選項,數據庫有數千條記錄。

感謝您提前的幫助,您將爲我節省一兩個頭痛。

回答

3

目前科爾多瓦的標準SQLite插件支持Pre-populated Databases,它將從www複製您的數據庫文件,並把它放到正確的目錄。它也支持Android和iOS,所以你不需要針對不同的平臺有不同的邏輯。

當您打開數據庫時,你可以指定它是預填充使用createFromLocation: 1這樣的:

var db = window.sqlitePlugin.openDatabase({ 
    name: "my.db", 
    createFromLocation: 1 
}); 

對於iOS,它會首先檢查www和文件是否存在,這將它複製到Documents。請記住,它將由iCloud備份。如果你想從iCloud中排除它,然後在openDatabase上加location: 2,這將使你的數據庫在Library/LocalDatabase

UPDATE(2016)

原來的科爾多瓦 - sqlite的存儲項目不支持預填充分貝了。

但是,此功能只是從同一個創建者移動到另一個項目。現在,爲此使用Cordova-sqlite-ext

+0

截至2017年,情況仍然如此,Cordova-sqlite-storage不支持預填充數據庫嗎?你也知道在哪裏把文件放入Ionic2應用程序? – 2017-01-02 19:45:04