mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
save databases works
This commit is contained in:
parent
0281563077
commit
c41b3fcfe2
@ -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);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user