2012-03-27 02:31:55 -04:00
Cordova SQLitePlugin
2011-06-23 10:03:47 -04:00
=====================
2012-03-27 02:31:55 -04:00
DISCLAIMER:
Created by @Joenoon:
Adapted to 1.5 by coomsie
2011-12-02 10:45:09 -05:00
DISCLAIMER:
2011-09-28 13:42:22 -04:00
We are brand new to objective-c, so there could be problems with our code!
2011-09-26 19:58:05 -04:00
Installing
==========
2012-03-07 10:50:27 -05:00
2012-03-27 02:31:55 -04:00
Cordova (PhoneGap) 1.5.0
2012-03-23 03:55:19 -04:00
--------------
SQLite library
--------------
In the Project "Build Phases" tab, select the _first_ "Link Binary with Libraries" dropdown menu and add the library `libsqlite3.dylib` or `libsqlite3.0.dylib` .
2012-01-31 21:54:54 -05:00
2012-03-23 03:55:19 -04:00
**NOTE:** In the "Build Phases" there can be multiple "Link Binary with Libraries" dropdown menus. Please select the first one otherwise it will not work.
2012-01-31 21:56:03 -05:00
2012-03-27 02:31:55 -04:00
SQLite Plugin
2012-03-23 03:55:19 -04:00
---------------
2012-01-31 21:56:03 -05:00
2011-09-26 19:58:05 -04:00
Drag .h and .m files into your project's Plugins folder (in xcode) -- I always
just have "Create references" as the option selected.
2011-09-26 20:44:37 -04:00
Take the precompiled javascript file from build/, or compile the coffeescript
file in src/ to javascript WITH the top-level function wrapper option (default).
2011-09-26 19:58:05 -04:00
Use the resulting javascript file in your HTML.
Look for the following to your project's PhoneGap.plist:
2011-09-26 20:05:16 -04:00
< key > Plugins< / key >
< dict >
...
< / dict >
2011-09-26 19:58:05 -04:00
Insert this in there:
2012-03-27 02:31:55 -04:00
< key > SQLitePlugin< / key >
< string > SQLitePlugin< / string >
2011-09-26 19:58:05 -04:00
General Usage
=============
2011-09-28 13:42:22 -04:00
## Coffee Script
2011-09-26 19:58:05 -04:00
2012-03-27 02:31:55 -04:00
db = new SQLitePlugin("test_native.sqlite3")
2011-09-26 20:05:16 -04:00
db.executeSql('DROP TABLE IF EXISTS test_table')
db.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)')
2011-09-26 19:58:05 -04:00
2011-09-26 20:05:16 -04:00
db.transaction (tx) ->
2011-12-02 10:45:09 -05:00
2012-03-28 04:45:36 -04:00
tx.executeSql "INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], (res) ->
2011-12-02 10:45:09 -05:00
2011-09-26 20:05:16 -04:00
# success callback
2011-12-02 10:45:09 -05:00
2011-09-26 20:05:16 -04:00
console.log "insertId: #{res.insertId} -- probably 1"
console.log "rowsAffected: #{res.rowsAffected} -- should be 1"
2011-12-02 10:45:09 -05:00
2011-09-26 20:05:16 -04:00
# check the count (not a part of the transaction)
2012-03-28 04:45:36 -04:00
db.executeSql "select count(id) as cnt from test_table;", [], (res) ->
2011-09-26 20:05:16 -04:00
console.log "rows.length: #{res.rows.length} -- should be 1"
console.log "rows[0].cnt: #{res.rows[0].cnt} -- should be 1"
2011-12-02 10:45:09 -05:00
2011-09-26 20:05:16 -04:00
, (e) ->
2011-12-02 10:45:09 -05:00
2011-09-26 20:05:16 -04:00
# error callback
2011-12-02 10:45:09 -05:00
2011-09-26 20:05:16 -04:00
console.log "ERROR: #{e.message}"
2011-09-27 08:39:37 -04:00
2011-09-28 13:42:22 -04:00
## Plain Javascript
2012-03-28 04:02:55 -04:00
var db;
db = new SQLitePlugin("my_sqlite_database.sqlite3");
db.executeSql('DROP TABLE IF EXISTS test_table');
db.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');
db.transaction(function(tx) {
return tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)",[ "test", 100], function(res) {
console.log("insertId: " + res.insertId + " -- probably 1");
console.log("rowsAffected: " + res.rowsAffected + " -- should be 1");
return db.executeSql("select count(id) as cnt from test_table;", [], function(res) {
console.log("rows.length: " + res.rows.length + " -- should be 1");
return console.log("rows[0].cnt: " + res.rows[0].cnt + " -- should be 1");
});
}, function(e) {
return console.log("ERROR: " + e.message);
});
});
2011-09-28 13:42:22 -04:00
2011-09-27 08:39:37 -04:00
Lawnchair Adapter Usage
=======================
Include the following js files in your html:
- lawnchair.js (you provide)
2012-03-27 02:31:55 -04:00
- sqlite_plugin.js
- lawnchair_sqlite_plugin_adapter.js (must come after sqlite_plugin.js)
2011-09-27 08:39:37 -04:00
2011-12-02 10:45:09 -05:00
The `name` option will determine the sqlite filename. Optionally, you can change it using the `db` option.
2012-03-27 02:31:55 -04:00
In this example, you would be using/creating the database at: *Documents/kvstore.sqlite3* (all db's in SQLitePlugin are in the Documents folder)
2011-09-27 08:39:37 -04:00
2012-03-27 02:31:55 -04:00
kvstore = new Lawnchair { name: "kvstore", adapter: SQLitePlugin.lawnchair_adapter }, () ->
2011-09-27 08:39:37 -04:00
# do stuff
2011-09-28 13:42:22 -04:00
2011-12-02 10:45:09 -05:00
Using the `db` option you can create multiple stores in one sqlite file. (There will be one table per store.)
recipes = new Lawnchair {db: "cookbook", name: "recipes", ...}
ingredients = new Lawnchair {db: "cookbook", name: "ingredients", ...}
2011-09-28 13:42:22 -04:00
2011-09-28 14:20:54 -04:00
### Other notes from @Joenoon:
2011-09-28 13:42:22 -04:00
I played with the idea of batching responses into larger sets of
writeJavascript on a timer, however there was only a barely noticeable
performance gain. So I took it out, not worth it. However there is a
massive performance gain by batching on the client-side to minimize
PhoneGap.exec calls using the transaction support.