【问题标题】:How to connect to Password protected SQLite DB with OrmLite?如何使用 OrmLite 连接到受密码保护的 SQLite DB?
【发布时间】:2017-04-27 10:08:40
【问题描述】:

我通过这段代码从资产中复制数据库:

    public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
        private static final String DATABASE_NAME = "database.db";
        private static final String DATABASE_PATH = "/data/data/"+BuildConfig.APPLICATION_ID+"/databases/";

     public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        copyFromAssets(context);
    }

      private void copyFromAssets(Context context) {
        boolean dbexist = checkdatabase();
        if (!dbexist) {
            File dir = new File(DATABASE_PATH);
                dir.mkdirs();
                InputStream myinput = context.getAssets().open(DATABASE_NAME);
                String outfilename = DATABASE_PATH + DATABASE_NAME;
                Log.i(DatabaseHelper.class.getName(), "DB Path : " + outfilename);
                OutputStream myoutput = new FileOutputStream(outfilename);
                byte[] buffer = new byte[1024];
                int length;
                while ((length = myinput.read(buffer)) > 0) {
                    myoutput.write(buffer, 0, length);
                }
                myoutput.flush();
                myoutput.close();
                myinput.close();
            }
    }
    }

为了获得 Dao,我使用了这个:

public Dao<AnyItem, Integer> getDaoAnyItem() throws SQLException {
        if (daoAnyItem == null) {
            daoAnyItem = getDao(AnyItem.class);
        }
        return daoAnyItem;
    }

但是如果我的数据库受到密码保护,如何获取 Dao?

【问题讨论】:

    标签: java android sqlite orm ormlite


    【解决方案1】:

    您必须将 SQLCipher 与 OrmLite 一起使用,我建议您使用 ormlite-sqlcipher

    【讨论】:

      【解决方案2】:

      OrmLiteSqliteOpenHelper 有一个构造函数,它接受密码,所以将你的超级调用更改为

      super(context, DATABASE_NAME, null, DATABASE_VERSION, (File)null, "DB password goes here");
      

      我会从 DatabaseHelper 构造函数中调用 copyFromAssets(context) 并在创建 DatabaseHelper 之前调用它,即应用启动时的第一件事

      【讨论】:

      • 没有这个构造函数super(context, DATABASE_NAME, null, DATABASE_VERSION, (File)null, "DB password goes here");
      • 啊,那你没有使用omrlite-sqlcipher,请看上一个答案
      猜你喜欢
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2014-05-14
      • 1970-01-01
      • 2011-12-23
      相关资源
      最近更新 更多