Reputation: 468
I am developing a cross platform (Android, IOS, WP) application that needs to have a relatively large prepopulated database. I am using Visual Studio 2013 with Cordova plugins.
Most answers on the internet point here or here. However these links always start with "copy your prepopulated database to the assets folder".
In my Visual Studio project, there is no assets folder. This is what I have:
How should I go about this? Preferably the solution should work on all platforms. Thanks.
Upvotes: 3
Views: 4672
Reputation: 1
When using Visual Studio (and Phonegap), you cannot see assets folder. If you would like to develop prepopulated DB in Visual Studio, you had better apply sqlite plugin.
You need two plugins.
1) Cordova-sqlite-evcore-extbuild-free
2) cordova-plugin-dbcopy ->this plugin will copy your database to assets folder.
I think the following Git will help you.
https://github.com/ymochi/prepopulated-DB-for-hybrid-applications
Upvotes: 0
Reputation: 619
No need to copy or to insert the values at first run of your app.
Instead use openDatabase with createFromLocation param as described here:
http://redwanhilali.com/ionic-sqlite/
Upvotes: 3
Reputation: 759
I like your question. It made me think about an upcoming project and how I am going to solve a similar issue.
The link you shared: http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html is a good place to start. The "assets" directory referenced isn't visible because, through Visual Studio you are looking at the Windows platform version of the code. Note, in the Xcode/iOS screen capture in the link you reference, the database file isn't in an assets folder, but rather "Resources" that roughly equates to assets within the Android project.
You will need a Mac and Xcode to build your project for iOS, this can not be done with Visual Studio or on a Windows machine. When the project is created by cordova with the "cordova platform create ios" command, you will see a resources directory and you can continue with your instructions.
Similarly, with Android you can open the Android project in Eclipse, or another editor/file browser and do the same. Myself, I am not brave enough (lack of experience) with Visual Studio to browse other platforms in a Visual Studio Solution.
ADDED NOTE: At http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html be sure to read through the recent discussions/comments with regard to copying the file into place within the app. Appears to still work fine, but the process has changed slightly with newer versions of Cordova.
Upvotes: 1
Reputation: 1303
The SQLite forces you to create THE COMPLETE Database executing "Create Tables" commands in a function inside the App, right?
That function ONLY executes if the Database DON'T EXIST. If already exists = don't execute that function!
So... to the "CREATE TABLE" commands, add "INSERT INTO" commands with what you need to populate! This will only execute the first time.
If you want a cleaner code, you can put all the data in an Array and then execute the Inserts with a For Loop.
(I did this in many Apps and worked like a charm!)
ADDED:
To solve "Code Brevity" I suggest 2 Options:
Option 1 - XML File: Add an external XML file with the info, and just read it in the "create db" function, and execute the "inserts" in a For Loop reading the XML file.
Option 2 - create a special js file (name it "populateDB.js" for example!) and enter all the code there... you won't see the code again!
I hope it helps because you cannot include a DB in your project, you HAVE to create it on the device...
Upvotes: 1