save databases works
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import android.database.Cursor;
|
||||||
|
|
||||||
|
public class CursorHelper {
|
||||||
|
|
||||||
|
|
||||||
|
public static Object getValue(Cursor cursor, int column) {
|
||||||
|
switch (cursor.getType(column)) {
|
||||||
|
case Cursor.FIELD_TYPE_STRING:
|
||||||
|
return cursor.getShort(column);
|
||||||
|
case Cursor.FIELD_TYPE_FLOAT:
|
||||||
|
return cursor.getFloat(column);
|
||||||
|
case Cursor.FIELD_TYPE_INTEGER:
|
||||||
|
return cursor.getInt(column);
|
||||||
|
case Cursor.FIELD_TYPE_NULL:
|
||||||
|
return null;
|
||||||
|
case Cursor.FIELD_TYPE_BLOB:
|
||||||
|
return cursor.getBlob(column);
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("unknown type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.DatabaseErrorHandler;
|
||||||
|
import android.database.SQLException;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
import android.database.sqlite.SQLiteTransactionListener;
|
||||||
|
|
||||||
|
public class Database {
|
||||||
|
|
||||||
|
|
||||||
|
private DatabasesOpenHelper mHelper;
|
||||||
|
private SQLiteDatabase mWritableDatabase;
|
||||||
|
private SQLiteDatabase mReadableDatabase;
|
||||||
|
|
||||||
|
public void executeSql(String sql){
|
||||||
|
mWritableDatabase.execSQL(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void transaction(TransactionCallback callback, TransactionErrorCallback errorCallback, DatabaseVoidCallback successCallback){
|
||||||
|
transactionInternal(mWritableDatabase, callback, errorCallback, successCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readTransaction(TransactionCallback callback, TransactionErrorCallback errorCallback, DatabaseVoidCallback successCallback){
|
||||||
|
transactionInternal(mReadableDatabase, callback, errorCallback, successCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeVersion(int oldVersion, int newVersion, TransactionCallback callback, TransactionErrorCallback errorCallback, DatabaseVoidCallback successCallback){
|
||||||
|
transactionInternal(mWritableDatabase, new TransactionCallback() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(Transaction transaction) {
|
||||||
|
//TODO
|
||||||
|
if(transaction.getDatabase().getVersion() == oldVersion){
|
||||||
|
transaction.getDatabase().setVersion(newVersion);
|
||||||
|
callback.handleEvent(transaction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, errorCallback, successCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void transactionInternal(SQLiteDatabase database, TransactionCallback callback, TransactionErrorCallback errorCallback, DatabaseVoidCallback successCallback){
|
||||||
|
database.beginTransactionWithListener(new SQLiteTransactionListener() {
|
||||||
|
@Override
|
||||||
|
public void onBegin() {
|
||||||
|
Transaction transaction = new Transaction(database);
|
||||||
|
try {
|
||||||
|
callback.handleEvent(transaction);
|
||||||
|
transaction.succeed();
|
||||||
|
}catch (SQLException e){
|
||||||
|
errorCallback.handleEvent(e);
|
||||||
|
}finally {
|
||||||
|
transaction.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCommit() {
|
||||||
|
successCallback.handleEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRollback() {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class DatabasesOpenHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
|
public DatabasesOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
|
||||||
|
super(context, name, factory, version);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabasesOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
|
||||||
|
super(context, name, factory, version, errorHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import android.database.Cursor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class DatabaseResultSet {
|
||||||
|
|
||||||
|
|
||||||
|
public static class RowList {
|
||||||
|
|
||||||
|
public final int length;
|
||||||
|
private final ArrayList<Map<String, Object>> mData;
|
||||||
|
|
||||||
|
|
||||||
|
public RowList(ArrayList<Map<String, Object>> data) {
|
||||||
|
mData = data;
|
||||||
|
length = mData.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object item(int i) {
|
||||||
|
return mData.get(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final long insertId;
|
||||||
|
public final long rowsAffected;
|
||||||
|
public final RowList rows;
|
||||||
|
|
||||||
|
public static DatabaseResultSet fromCursor(Cursor cursor) {
|
||||||
|
ArrayList<Map<String, Object>> rows = new ArrayList<>();
|
||||||
|
if (!cursor.moveToFirst()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int columnCount = cursor.getColumnCount();
|
||||||
|
long insertId = cursor.getLong(0);
|
||||||
|
rows.add(readRowAsMap(cursor, columnCount));
|
||||||
|
while (cursor.moveToNext()) {
|
||||||
|
rows.add(readRowAsMap(cursor, columnCount));
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
return new DatabaseResultSet(insertId, new RowList(rows));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<String, Object> readRowAsMap(Cursor cursor, int columnCount) {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
for (int i = 0; i < columnCount; i++) {
|
||||||
|
map.put(cursor.getColumnName(i), CursorHelper.getValue(cursor, columnCount));
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseResultSet(long insertId, RowList rowList) {
|
||||||
|
this.insertId = insertId;
|
||||||
|
this.rowsAffected = rowList.length;
|
||||||
|
this.rows = rowList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
public interface DatabaseVoidCallback {
|
||||||
|
void handleEvent();
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
public class Databases {
|
||||||
|
|
||||||
|
public static Database openDatabase(String name, int version, String desc, long size){
|
||||||
|
return new Database();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
|
||||||
|
public interface StatementCallback {
|
||||||
|
|
||||||
|
void handleEvent(Transaction transaction, DatabaseResultSet resultSet);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import android.database.SQLException;
|
||||||
|
|
||||||
|
public interface StatementErrorCallback {
|
||||||
|
|
||||||
|
boolean handleEvent(Transaction transaction, SQLException error);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
|
||||||
|
public class Transaction {
|
||||||
|
|
||||||
|
private final SQLiteDatabase mDatabase;
|
||||||
|
|
||||||
|
public SQLiteDatabase getDatabase() {
|
||||||
|
return mDatabase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Transaction(SQLiteDatabase database) {
|
||||||
|
mDatabase = database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void executeSql(String sqlStatement, String[] arguments, StatementCallback callback, StatementErrorCallback errorCallback){
|
||||||
|
Cursor cursor = mDatabase.rawQuery(sqlStatement, arguments);
|
||||||
|
callback.handleEvent(this, DatabaseResultSet.fromCursor(cursor));
|
||||||
|
}
|
||||||
|
|
||||||
|
void succeed() {
|
||||||
|
mDatabase.setTransactionSuccessful();
|
||||||
|
}
|
||||||
|
|
||||||
|
void end() {
|
||||||
|
mDatabase.endTransaction();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
public interface TransactionCallback {
|
||||||
|
void handleEvent(Transaction transaction);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.stardust.autojs.core.database;
|
||||||
|
|
||||||
|
import android.database.SQLException;
|
||||||
|
|
||||||
|
public interface TransactionErrorCallback {
|
||||||
|
|
||||||
|
void handleEvent(SQLException e);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user