我使用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();
}
}
答案 0 :(得分:1)
“xArthasx”在Issue 41中说:
如果你有文件(sqlite数据库)并且表保持与你在java中创建的类相同的结构,你应该能够通过将文件(sqlite数据库)复制到assets目录(项目目录)来使用数据库并将AA_DB_NAME设置为等于文件名。
如果现有数据库不是使用ActiveAndroid创建的,则可能需要迁移数据;见Use ActiveAndroid on existing database-content。
答案 1 :(得分:0)
您可以按照以下步骤使用预先填充的数据库:
将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 {