android定义文件路径,具有现有数据库和自定义文件路径的Android Sugar ORM

>首先,我对Sugar的想法感到不舒服

app类.如果我还有其他任务需要执行怎么办?

在app开始之前?!所以让我们用自己的方式扩展SugarApp

然后,AppClass在清单中注册appClass名称.此外,这是我第一次相信init db的正确位置.

public class MyAppStartClass extends SugarApp {

@Override

public final void onCreate() {

init();

super.onCreate();

}

private void init() {

initDB();

}

private void initDB() {

try {

if (!doesDatabaseExist(this, consts.dbPath)) {

Context context = getApplicationContext();

SQLiteDatabase db = context.openOrCreateDatabase(consts.dbName, context.MODE_PRIVATE, null);

db.close();

InputStream dbInput = getApplicationContext().getAssets().open(consts.dbName);

String outFileName = consts.dbPath;

OutputStream dbOutput = new FileOutputStream(outFileName);

try {

byte[] buffer = new byte[1024];

int length;

while ((length = dbInput.read(buffer)) > 0) {

dbOutput.write(buffer, 0, length);

}

} finally {

dbOutput.flush();

dbOutput.close();

dbInput.close();

}

}

} catch (Exception e) {

e.toString();

}

}

private boolean doesDatabaseExist(ContextWrapper context, String dbName) {

File dbFile = context.getDatabasePath(dbName);

return dbFile.exists();

}

}

> Manifest:android:name =“com.myPackageName.MyAppStartClass”

>确保首先创建一个空数据库,否则你将从FileOutputStream()和dbPath = /data/data/com.myPackageName/databases/myDb.db收到错误

SQLiteDatabase db = context.openOrCreateDatabase(consts.dbName,context.MODE_PRIVATE,null);

db.close();

>确保现有的db模式具有主键列ID.哦耶! Sugar只将ID视为检索数据的主键.

>如果你想使用现有的表,在扩展SugarRecord时不要指定T,你必须添加Sugar作为模块,你的项目依赖于它!

public class Book extends SugarRecord {

String title;

String edition;

public Book(){

}

public Book(String title, String edition){

this.title = title;

this.edition = edition;

}

}

6.如果要使用现有表.请注意,Sugar会查找大写列名称,因此如果您现有的表列名称为小写,则永远不会从中获取任何现有数据!

这让我得出了一个不情愿的结论:如果你从头开始db并使用它来为你生成db和table,那么Sugar就很棒.但是当你已经有一个包含数据的现有数据库时,情况并非如此.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值