android创建数据库到SD卡

最近在写全景图片查看器的项目,用到了SQLite数据库。由于数据库中需要存放图片缩略图,导致数据库比较庞大,如果直接放在内存中,可能会出现运行缓慢占用内存过大的问题。因此想把数据库创建到外部存储。参考了其他关于解决此问题的博客,

http://blog.csdn.net/howlaa/article/details/46707159

此博客写的比较详细,感谢原作者。

根据作者的思路,本人查看了一下SQLiteOpenHelper的源码,发现在该类构造函数执行的操作就是创建一个可用的数据库文件,而参数列表中的第二个参数(源码中参数名是name),一直以来对该参数的理解就是数据库的名称。

源码

if (DEBUG_STRICT_READONLY && !writable) {
final String path = mContext.getDatabasePath(mName).getPath();
db = SQLiteDatabase.openDatabase(path, mFactory,
SQLiteDatabase.OPEN_READONLY, mErrorHandler);
}
此段代码比较关键,从这里可以看出,mName(值等于参数列表的name)实际上指的是要创建的数据库的完整路径,所以想把数据库创建在SD卡中,只需要将name值设置为一个你想要的完整路径,再传进OpenHelper的构造函数就可以了.

附上一个小小的demo

public class MyDbhelper extends SQLiteOpenHelper {
    static String db_path = Environment.getExternalStorageDirectory()
            + "/mydb/db_test";

    public MyDbhelper(Context context) {
        super(context, db_path, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table dbtest(integer id ,varchar name)";
        db.execSQL(sql);
        Log.e("MyDbhelper", "test: onCreate");
    }

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

    }

}

public class Dbtest {
    private MyDbhelper myDbhelper;
    private SQLiteDatabase db;

    public Dbtest(Context context){
        File file = new File(Environment.getExternalStorageDirectory()+"/mydb");
        if(!file.exists()){
            file.mkdir();
        }
        myDbhelper = new MyDbhelper(context);
        db = myDbhelper.getWritableDatabase();
        Log.e("test", "db == null"+(db==null));
    }
}

在mainActivity中创建Dbtest对象,即可看到我们指定的数据库目录以及数据库文件被创建出来了。导出db文件查看,数据库和数据表确实已经被创建了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值