An Apache Cordova adapter for PawSQLite
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

132 lines
3.1 KiB

package org.n0m.pawsqlite;
import java.io.File;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
import android.database.sqlite.SQLiteDatabase;
import android.database.SQLException;
import android.database.Cursor;
class DB {
private static final String TAG = "PawSQLite";
public final String dbName;
private File dbFile;
public SQLiteDatabase db;
public DB (File dbFile, String dbName) {
this.dbFile = dbFile;
this.dbName = dbName;
}
public void handleRequest(DBRequest request) {
try {
switch(request.action) {
case VERSION:
version(request.callback);
break;
case OPEN:
open(request.callback);
break;
case SQL:
sql(request.args, request.callback);
break;
case CLOSE:
close(request.callback);
break;
case DELETE:
delete(request.callback);
break;
default:
request.callback.error("Unrecognised Action");
}
} catch (JSONException e) {
request.callback.error("JSONException", e);
}
}
public void open(CallbackWrapper callback) throws JSONException {
if (db == null || !db.isOpen()) {
db = SQLiteDatabase.openOrCreateDatabase(dbFile, null);
}
JSONObject response = new JSONObject();
response.put("path", db.getPath());
response.put("version", db.getVersion());
callback.success(response);
}
public void delete(CallbackWrapper callback) {
if (db == null) {
if(SQLiteDatabase.deleteDatabase(dbFile)) {
callback.success();
} else {
callback.error("Unable to Delete Database",
"SQLiteDatabase.deleteDatabase returned false");
}
} else {
callback.error("Unable to Delete Database",
"Database is currently open");
}
}
public void sql(JSONArray args, CallbackWrapper callback) throws JSONException {
if (db == null) {
callback.error(
"DB Not open",
"Database: " + dbName + " is not open"
);
}
String query = args.optString(0);
// Remove query from args
args.remove(0);
QueryWrapper queryWrapper = new QueryWrapper(db, query, args);
JSONObject result;
try {
result = queryWrapper.execute();
} catch (SQLException e) {
callback.error("SQLException", e);
return;
} catch (Exception e) {
callback.error("Exception", e);
return;
}
callback.success(result);
}
public void close(CallbackWrapper callback) {
if (db != null) {
db.close();
}
callback.success();
}
public void version(CallbackWrapper callback) throws JSONException {
String query = "select sqlite_version() AS sqlite_version";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(":memory:", null);
Cursor cursor = db.rawQuery(query, null);
String sqliteVersion = "";
if (cursor.moveToNext()) {
sqliteVersion = cursor.getString(0);
}
cursor.close();
db.close();
JSONObject result = new JSONObject();
result.put("version", sqliteVersion);
callback.success(result);
}
}