Android操作位于sd卡上的sqlite数据库

2019-12-11 11:16:19 浏览数 (1)

sky-mxc 总结 转载注明出处:https://sky-mxc.github.io

对 sd卡上sqlite 数据库的操作

Android默认的数据库位置是在 datadatapackageNamedatabases目录下的; 有时候因为业务需要我们需要操作位于sd卡的数据库,就可以通过重写 Context类的方法来实现

重写 ContextWrapper

我们在创建SqliteOpenHelper实例的时候需要传入一个Context 实例,就是通过他来实现的

代码语言:javascript复制

public class DBContext extends ContextWrapper {
    public static final String TAG = "DBContext";

    public DBContext(Context base) {
        super(base);
    }

    /**
     * 返回 数据库文件 
     * 重写此方法 返回我们位于sd卡的数据库文件
     * @param name
     * @return
     */
    @Override
    public File getDatabasePath(String name) {
        //位于 sd卡的数据库 初始化时已经创建好了
        File file = new File(Environment.getExternalStorageDirectory().getPath() "/dbDemo",name);
        return file;
    }

    /**
     * Android 4.0后会调用此方法 还有一个2.3以前的方法就重写了,也没有那么底的版本了
     * @param name
     * @param mode
     * @param factory
     * @param errorHandler
     * @return
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
       SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name),factory);
        return db;
    }
}

DBHelper

DBHelper

代码语言:javascript复制
public class DBHelper extends SQLiteOpenHelper {
    public static final String TAG = "DBHelper";

    private  static final String NAME = "test.db";
    private  static final int VERSION = 1;

    private  static DBHelper dbHelpter;

    public static DBHelper getDbHelpter(Context context){
        if (dbHelpter == null){
            dbHelpter = new DBHelper(context);
        }
        return dbHelpter;
    }


    private DBHelper(Context context) {
        super(context, NAME, null, VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

使用

代码语言:javascript复制
private void query(){

    DBContext dbContext = new DBContext(this);
    DBHelper helpter = DBHelper.getDbHelpter(dbContext);
    SQLiteDatabase db = helpter.getWritableDatabase();
    Cursor cu = db.query("table1", new String[]{"id", "name", "age"}, null, null, null, null, "id desc", null);
    if (null != cu){
        while (cu.moveToNext()){
            int id = cu.getInt(cu.getColumnIndex("id"));
            String name = cu.getString(cu.getColumnIndex("name"));
            int age = cu.getInt(cu.getColumnIndex("age"));
            Log.e(TAG, "query: id=" id ";name=" name ";age=" age);
        }
        cu.close();
    }
}

参考博客

http://blog.csdn.net/liyulei316686082/article/details/7230709

0 人点赞