java 默认数据库创建路径_SQLlite数据库指定存储位置

将我们的数据库放到外设存储,不仅仅放在机器存储中,可以应用到一些需要单独处理或做关键信息备份使用

思路就是使用SQLiteOpenHelper构造方法+自定义ContextWrapper

我们倒着推导一下思路:

1.数据库对象实例化时,需要我们创建SQLiteOpenHelper对象来实现数据库的创建、更新,及后续的数据库操作

2.SQLiteOpenHelper所提供的构造方法,拿到路径,通过该路径创建数据库

下面看实现:

1.继承SQLiteOpenHelper

构造方法:

[代码]java代码:public OurSqlLiteHelper(Context context) {super(new DataBaseContext(context, String path), database_name,null, version);}

DataBaseContext(context, String path)从哪来?

2.继承ContextWrapper构造Context,通过构造方法对路径进行赋值。

String ourPath;//被赋值的路径

[代码]java代码:public DataBaseContext(Context base, String dirPath) {super(base);this.ourPath= dirPath;}

拿到路径,重写父类方法,创建数据库文件路径:

[代码]java代码:@Overridepublic File getDatabasePath(String name) {File result =new File(ourPath+ File.separator + name); if (!result.getParentFile().exists()) {result.getParentFile().mkdirs();//路径不存在,创建} return result;}

重写两个重要方法,打开或创建数据库文件:

[代码]java代码:public SQLiteDatabase openOrCreateDatabase(String name,int mode, SQLiteDatabase.CursorFactory factory){return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);} @TargetApi(Build.VERSION_CODES.HONEYCOMB)public SQLiteDatabase openOrCreateDatabase(String name,int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler){return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name).getAbsolutePath(), factory, errorHandler);}

至此,我们自定义数据库路径流程就完成了。

关于数据库的使用方面需要关注的点:

数据库的升级:初学者很容易在数据库升级的时候删除原有数据表,对于不重要的信息没毛病,但是对于一些关键的信息,这样对用户就不是很友好。假设我们只有新增没有删除,我们实际开发中所使用的方式那就应该是这样的:

alter table

sql语句:

if(oldVersion

String new_column  = "alter table "+ TABLE_NAME +" add " + 新字段 +" default 默认值 ";

db.execSQL(new_column);

}

而不是这样的:

drop table

对于增删改查,由于可能存在应用突然被关闭或杀掉,而我们又需要在出现不可预料问题时保证我们数据的干净,至少不是改了一半,此时我们需要用到事物Transaction,养成良好习惯:拿到数据库对象后,开启事物beginTransaction,执行完insert,update,delete后setTransactionSuccessful成功提交,以免回滚。最后关闭资源前endTransaction结束我们的事物

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值