在Android中,数据库查询应该放在哪里?

In Android, where should database queries be kept?

我有一个小的 Android 项目,目前我在 Activity classes 中声明和调用数据库 (SQLite) 查询。但是,查询有些冗长,我发现自己在用户执行某些操作(例如更改日期和从该日期加载数据)后一遍又一遍地声明和调用相同的查询。因此,我想知道查询是否应该保存在单独的 class 中(例如数据库契约 class?),或者甚至可能保存在它们自己的 return 游标的方法中。我会想象可以使用类似于方法 getTransactionsByDate(Date newDate) 的东西。有没有我可能不知道的既定模式?

你是这个意思吗?

public class DatabaseSource {

    private SQLiteDatabase mDatabase;
    private DatabaseHelper mHelper;
    private Context mContext;

    public DatabaseSource(Context context){
        mContext = context;
        mHelper = new DatabaseHelper(mContext);
    }

    public void open() throws SQLException{
        mDatabase = mHelper.getWritableDatabase();
    }

    public void close(){
        mDatabase.close();
    }

    public void insertData(int something){
        ContentValues values = new ContentValues(1);
        values.put(DatabaseHelper.COLUMN, something);
        mDatabase.insert(DatabaseHelper.TABLE, null, values);

    }

    public Cursor getAll(){
        Cursor cursor = mDatabase.rawQuery("SELECT * FROM TABLE");
        return cursor;
    }
}

这缩短了查询调用过程。在此示例中,DatabaseHelper 是一个 class,它扩展了 SQLiteOpenHelper,并具有用于数据库的 onCreateonUpdate 方法。