ActiveAndroid使用存在的数据库

时间:2016-01-03 09:12:50

标签: java android sqlite activeandroid

我使用ActiveAndroid作为第三方库以便在android中使用sqlite数据库,我对使用此库创建和使用新数据库没有任何问题,但我不知道如何我可以在这个库中使用我自己的数据库吗?我想将自己的数据库放入assets文件夹并将其加载到ActiveAndroid库中。

public class Application extends com.activeandroid.app.Application
{

    @Override
    public void onCreate()
    {
        super.onCreate();
        createDatabase();
    }

    private void createDatabase()
    {
        Configuration dbConfiguration = new Configuration.Builder(this).setDatabaseName("dastan.db").create();
        ActiveAndroid.initialize(dbConfiguration);

    }


    @Override
    public void onLowMemory()
    {
        android.os.Process.killProcess(android.os.Process.myPid());
        super.onLowMemory();
    }
}

2 个答案:

答案 0 :(得分:1)

“xArthasx”在Issue 41中说:

  

如果你有文件(sqlite数据库)并且表保持与你在java中创建的类相同的结构,你应该能够通过将文件(sqlite数据库)复制到assets目录(项目目录)来使用数据库并将AA_DB_NAME设置为等于文件名。

如果现有数据库不是使用ActiveAndroid创建的,则可能需要迁移数据;见Use ActiveAndroid on existing database-content

答案 1 :(得分:0)

根据此official document

您可以按照以下步骤使用预先填充的数据库:

将SQLite数据库文件的副本放在应用程序的assets目录中,例如:

/myapp/src/main/assets/prepop.db

确保在清单文件中设置AA_DB_NAME,例如:

<meta-data android:name="AA_DB_NAME" android:value="prepop.db" />

现在,当您部署应用程序时,它会将prepop.db文件从assets目录复制到/data/data/myapp/databases storage.

注意:这将导致数据库重复,因为它将与APK一起打包并复制到存储目录。 确保数据库与ActiveAndroid正常工作

要确保数据库与ActiveAndroid一起正常运行,请执行以下步骤:

设置android_metadata表

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US')

INSERT INTO "android_metadata" VALUES ('en_US')

如果尚未为模型定义id列名称,请确保将主键重命名为默认值Id,而不是_id,这是Android数据库的标准。但是,如果要在ListViews中显示数据,建议您将主键列定义为_id。您只需在模型上的id = "_id"注释中添加@Table参数即可完成此操作,如下所示:

@Table(name = "Items", id = "_id")
public class Item extends Model {