mirror of
https://github.com/moparisthebest/PhoneGap-SQLitePlugin-Android
synced 2024-08-13 15:53:46 -04:00
Fix Android version to handle multiple databases (#2)
This commit is contained in:
parent
938bce69b8
commit
ca74669116
@ -44,7 +44,7 @@ do ->
|
|||||||
console.log "SQLitePlugin::executePragmaStatement"
|
console.log "SQLitePlugin::executePragmaStatement"
|
||||||
pcb = success
|
pcb = success
|
||||||
|
|
||||||
cordova.exec (-> 1), error, "SQLitePlugin", "executePragmaStatement", [ "A-1", statement ]
|
cordova.exec (-> 1), error, "SQLitePlugin", "executePragmaStatement", [ @dbPath, statement ]
|
||||||
return
|
return
|
||||||
|
|
||||||
SQLitePluginCallback =
|
SQLitePluginCallback =
|
||||||
@ -81,6 +81,7 @@ do ->
|
|||||||
transaction_callback_queue[@trans_id] = new Object()
|
transaction_callback_queue[@trans_id] = new Object()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# XXX FUTURE handle tx CBs under SQLitePluginCallback object:
|
||||||
SQLitePluginTransaction.queryCompleteCallback = (transId, queryId, result) ->
|
SQLitePluginTransaction.queryCompleteCallback = (transId, queryId, result) ->
|
||||||
console.log "SQLitePluginTransaction.queryCompleteCallback"
|
console.log "SQLitePluginTransaction.queryCompleteCallback"
|
||||||
query = null
|
query = null
|
||||||
@ -198,10 +199,13 @@ do ->
|
|||||||
if error
|
if error
|
||||||
errorcb = (res) ->
|
errorcb = (res) ->
|
||||||
error txself, res
|
error txself, res
|
||||||
|
|
||||||
transaction_callback_queue[@trans_id]["success"] = successcb
|
transaction_callback_queue[@trans_id]["success"] = successcb
|
||||||
transaction_callback_queue[@trans_id]["error"] = errorcb
|
transaction_callback_queue[@trans_id]["error"] = errorcb
|
||||||
cordova.exec null, null, "SQLitePlugin", "executeSqlBatch", transaction_queue[@trans_id]
|
|
||||||
|
|
||||||
|
cordova.exec null, null, "SQLitePlugin", "executeSqlBatch", [ @dbPath, transaction_queue[@trans_id] ]
|
||||||
|
|
||||||
|
# XXX FUTURE all CBs under SQLitePluginCallback
|
||||||
# required for callbacks:
|
# required for callbacks:
|
||||||
root.SQLitePluginTransaction = SQLitePluginTransaction
|
root.SQLitePluginTransaction = SQLitePluginTransaction
|
||||||
root.SQLitePluginCallback = SQLitePluginCallback
|
root.SQLitePluginCallback = SQLitePluginCallback
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
pcb = success;
|
pcb = success;
|
||||||
cordova.exec((function() {
|
cordova.exec((function() {
|
||||||
return 1;
|
return 1;
|
||||||
}), error, "SQLitePlugin", "executePragmaStatement", ["A-1", statement]);
|
}), error, "SQLitePlugin", "executePragmaStatement", [this.dbPath, statement]);
|
||||||
};
|
};
|
||||||
SQLitePluginCallback = {
|
SQLitePluginCallback = {
|
||||||
p1: function(id, result) {
|
p1: function(id, result) {
|
||||||
@ -230,7 +230,7 @@
|
|||||||
}
|
}
|
||||||
transaction_callback_queue[this.trans_id]["success"] = successcb;
|
transaction_callback_queue[this.trans_id]["success"] = successcb;
|
||||||
transaction_callback_queue[this.trans_id]["error"] = errorcb;
|
transaction_callback_queue[this.trans_id]["error"] = errorcb;
|
||||||
return cordova.exec(null, null, "SQLitePlugin", "executeSqlBatch", transaction_queue[this.trans_id]);
|
return cordova.exec(null, null, "SQLitePlugin", "executeSqlBatch", [this.dbPath, transaction_queue[this.trans_id]]);
|
||||||
};
|
};
|
||||||
root.SQLitePluginTransaction = SQLitePluginTransaction;
|
root.SQLitePluginTransaction = SQLitePluginTransaction;
|
||||||
root.SQLitePluginCallback = SQLitePluginCallback;
|
root.SQLitePluginCallback = SQLitePluginCallback;
|
||||||
|
@ -20,17 +20,21 @@ import android.content.Context;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.*;
|
import android.database.sqlite.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
public class SQLitePlugin extends Plugin {
|
public class SQLitePlugin extends Plugin {
|
||||||
|
/**
|
||||||
// Data Definition Language
|
* Multiple database map.
|
||||||
SQLiteDatabase myDb = null; // Database object
|
*/
|
||||||
|
HashMap<String, SQLiteDatabase> myDbMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public SQLitePlugin() {
|
public SQLitePlugin() {
|
||||||
|
myDbMap = new HashMap<String, SQLiteDatabase>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,15 +58,20 @@ public class SQLitePlugin extends Plugin {
|
|||||||
"database", 5000000);
|
"database", 5000000);
|
||||||
//this.openDatabase(args.getString(0), args.getString(1),
|
//this.openDatabase(args.getString(0), args.getString(1),
|
||||||
// args.getString(2), args.getLong(3));
|
// args.getString(2), args.getLong(3));
|
||||||
}
|
}
|
||||||
else if (action.equals("executePragmaStatement"))
|
// XXX TODO:
|
||||||
|
else if (action.equals("close")) {
|
||||||
|
Log.v("error", "NOT IMPLEMENTED"); // XXX TODO
|
||||||
|
}
|
||||||
|
else if (action.equals("executePragmaStatement"))
|
||||||
{
|
{
|
||||||
String id = args.getString(0);
|
String dbName = args.getString(0);
|
||||||
String query = args.getString(1);
|
String query = args.getString(1);
|
||||||
Cursor myCursor = this.myDb.rawQuery(query, null);
|
|
||||||
|
Cursor myCursor = this.getDatabase(dbName).rawQuery(query, null);
|
||||||
this.processPragmaResults(myCursor, id);
|
this.processPragmaResults(myCursor, id);
|
||||||
}
|
}
|
||||||
else if (action.equals("executeSqlBatch"))
|
else if (action.equals("executeSqlBatch"))
|
||||||
{
|
{
|
||||||
String[] queries = null;
|
String[] queries = null;
|
||||||
String[] queryIDs = null;
|
String[] queryIDs = null;
|
||||||
@ -71,18 +80,21 @@ public class SQLitePlugin extends Plugin {
|
|||||||
JSONArray jsonArr = null;
|
JSONArray jsonArr = null;
|
||||||
int paramLen = 0;
|
int paramLen = 0;
|
||||||
JSONArray[] jsonparams = null;
|
JSONArray[] jsonparams = null;
|
||||||
|
|
||||||
if (args.isNull(0)) {
|
String dbName = args.getString(0);
|
||||||
|
JSONArray txargs = args.getJSONArray(1);
|
||||||
|
|
||||||
|
if (txargs.isNull(0)) {
|
||||||
queries = new String[0];
|
queries = new String[0];
|
||||||
} else {
|
} else {
|
||||||
int len = args.length();
|
int len = txargs.length();
|
||||||
queries = new String[len];
|
queries = new String[len];
|
||||||
queryIDs = new String[len];
|
queryIDs = new String[len];
|
||||||
jsonparams = new JSONArray[len];
|
jsonparams = new JSONArray[len];
|
||||||
|
|
||||||
for (int i = 0; i < len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
a = args.getJSONObject(i);
|
a = txargs.getJSONObject(i);
|
||||||
queries[i] = a.getString("query");
|
queries[i] = a.getString("query");
|
||||||
queryIDs[i] = a.getString("query_id");
|
queryIDs[i] = a.getString("query_id");
|
||||||
trans_id = a.getString("trans_id");
|
trans_id = a.getString("trans_id");
|
||||||
@ -92,7 +104,7 @@ public class SQLitePlugin extends Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(trans_id != null)
|
if(trans_id != null)
|
||||||
this.executeSqlBatch(queries, jsonparams, queryIDs, trans_id);
|
this.executeSqlBatch(dbName, queries, jsonparams, queryIDs, trans_id);
|
||||||
else
|
else
|
||||||
Log.v("error", "null trans_id");
|
Log.v("error", "null trans_id");
|
||||||
}
|
}
|
||||||
@ -119,10 +131,12 @@ public class SQLitePlugin extends Plugin {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
|
/** XXX TODO :
|
||||||
if (this.myDb != null) {
|
if (this.myDb != null) {
|
||||||
this.myDb.close();
|
this.myDb.close();
|
||||||
this.myDb = null;
|
this.myDb = null;
|
||||||
}
|
}
|
||||||
|
**/
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -141,28 +155,31 @@ public class SQLitePlugin extends Plugin {
|
|||||||
* @param size
|
* @param size
|
||||||
* The size in bytes
|
* The size in bytes
|
||||||
*/
|
*/
|
||||||
public void openDatabase(String db, String version, String display_name,
|
private void openDatabase(String db, String version, String display_name,
|
||||||
long size) {
|
long size) {
|
||||||
|
SQLiteDatabase myDb = this.cordova.getActivity().getApplicationContext().openOrCreateDatabase(db + ".db", Context.MODE_PRIVATE, null);
|
||||||
// If database is open, then close it
|
myDbMap.put(db, myDb);
|
||||||
if (this.myDb != null) {
|
|
||||||
this.myDb.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.myDb = this.cordova.getActivity().getApplicationContext().openOrCreateDatabase(db + ".db", Context.MODE_PRIVATE, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void executeSqlBatch(String[] queryarr, JSONArray[] jsonparams, String[] queryIDs, String tx_id) {
|
private SQLiteDatabase getDatabase(String dbName) {
|
||||||
|
return myDbMap.get(dbName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void executeSqlBatch(String dbName, String[] queryarr, JSONArray[] jsonparams, String[] queryIDs, String tx_id) {
|
||||||
|
SQLiteDatabase myDb = this.getDatabase(dbName); // XXX TODO check for null
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.myDb.beginTransaction();
|
myDb.beginTransaction();
|
||||||
|
|
||||||
String query = "";
|
String query = "";
|
||||||
String query_id = "";
|
String query_id = "";
|
||||||
int len = queryarr.length;
|
int len = queryarr.length;
|
||||||
|
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
query = queryarr[i];
|
query = queryarr[i];
|
||||||
query_id = queryIDs[i];
|
query_id = queryIDs[i];
|
||||||
if (query.toLowerCase().startsWith("insert") && jsonparams != null) {
|
if (query.toLowerCase().startsWith("insert") && jsonparams != null) {
|
||||||
SQLiteStatement myStatement = this.myDb.compileStatement(query);
|
SQLiteStatement myStatement = myDb.compileStatement(query);
|
||||||
for (int j = 0; j < jsonparams[i].length(); j++) {
|
for (int j = 0; j < jsonparams[i].length(); j++) {
|
||||||
if (jsonparams[i].get(j) instanceof Float || jsonparams[i].get(j) instanceof Double ) {
|
if (jsonparams[i].get(j) instanceof Float || jsonparams[i].get(j) instanceof Double ) {
|
||||||
myStatement.bindDouble(j + 1, jsonparams[i].getDouble(j));
|
myStatement.bindDouble(j + 1, jsonparams[i].getDouble(j));
|
||||||
@ -189,13 +206,13 @@ public class SQLitePlugin extends Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Cursor myCursor = this.myDb.rawQuery(query, params);
|
Cursor myCursor = myDb.rawQuery(query, params);
|
||||||
|
|
||||||
this.processResults(myCursor, query_id, tx_id);
|
this.processResults(myCursor, query_id, tx_id);
|
||||||
myCursor.close();
|
myCursor.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.myDb.setTransactionSuccessful();
|
myDb.setTransactionSuccessful();
|
||||||
}
|
}
|
||||||
catch (SQLiteException ex) {
|
catch (SQLiteException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
@ -207,7 +224,7 @@ public class SQLitePlugin extends Plugin {
|
|||||||
this.sendJavascript("SQLitePluginTransaction.txErrorCallback('" + tx_id + "', '"+ex.getMessage()+"');");
|
this.sendJavascript("SQLitePluginTransaction.txErrorCallback('" + tx_id + "', '"+ex.getMessage()+"');");
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
this.myDb.endTransaction();
|
myDb.endTransaction();
|
||||||
Log.v("executeSqlBatch", tx_id);
|
Log.v("executeSqlBatch", tx_id);
|
||||||
this.sendJavascript("SQLitePluginTransaction.txCompleteCallback('" + tx_id + "');");
|
this.sendJavascript("SQLitePluginTransaction.txCompleteCallback('" + tx_id + "');");
|
||||||
}
|
}
|
||||||
@ -221,11 +238,12 @@ public class SQLitePlugin extends Plugin {
|
|||||||
* @param tx_id
|
* @param tx_id
|
||||||
* Transaction id
|
* Transaction id
|
||||||
*/
|
*/
|
||||||
public void processResults(Cursor cur, String query_id, String tx_id) {
|
private void processResults(Cursor cur, String query_id, String tx_id)
|
||||||
|
{
|
||||||
String result = "[]";
|
String result = "[]";
|
||||||
// If query result has rows
|
// If query result has rows
|
||||||
|
|
||||||
|
// XXX TODO use results2string() and do test:
|
||||||
if (cur.moveToFirst()) {
|
if (cur.moveToFirst()) {
|
||||||
JSONArray fullresult = new JSONArray();
|
JSONArray fullresult = new JSONArray();
|
||||||
String key = "";
|
String key = "";
|
||||||
@ -280,8 +298,15 @@ public class SQLitePlugin extends Plugin {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processPragmaResults(Cursor cur, String id) {
|
private void processPragmaResults(Cursor cur, String id)
|
||||||
|
{
|
||||||
|
String result = this.results2string(cur);
|
||||||
|
|
||||||
|
this.sendJavascript(" SQLitePluginCallback.p1('" + id + "', " + result + ");");
|
||||||
|
}
|
||||||
|
|
||||||
|
private String results2string(Cursor cur)
|
||||||
|
{
|
||||||
String result = "[]";
|
String result = "[]";
|
||||||
|
|
||||||
// If query result has rows
|
// If query result has rows
|
||||||
@ -297,7 +322,6 @@ public class SQLitePlugin extends Plugin {
|
|||||||
for (int i = 0; i < colCount; ++i) {
|
for (int i = 0; i < colCount; ++i) {
|
||||||
key = cur.getColumnName(i);
|
key = cur.getColumnName(i);
|
||||||
|
|
||||||
// XXX TBD factor out:
|
|
||||||
// for old Android SDK remove lines from HERE:
|
// for old Android SDK remove lines from HERE:
|
||||||
if(android.os.Build.VERSION.SDK_INT >= 11)
|
if(android.os.Build.VERSION.SDK_INT >= 11)
|
||||||
{
|
{
|
||||||
@ -337,7 +361,6 @@ public class SQLitePlugin extends Plugin {
|
|||||||
result = fullresult.toString();
|
result = fullresult.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.sendJavascript(" SQLitePluginCallback.p1('" + id + "', " + result + ");");
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user