Android预填充数据库

问题描述:

我正在开发一个Android应用程序,该应用程序需要在用户可以使用该应用程序之前在该应用程序的数据库中填充多个条目(一个表格,包含1000-10000行)。我浏览过一些教程,并且我不确定这样做的最佳方式。我应该在每次启动应用程序时检查数据库是否存在,如果不存在,创建它并插入我需要的数千条记录?还是有更好的方法来处理这个问题?理想情况下,它可以作为应用程序安装过程的一部分,但我不确定这是否可行。任何反馈将不胜感激。Android预填充数据库

+0

http://*.com/a/9109728/265167 – 2012-02-15 11:00:58

+1

我不想张贴此作为一个答案,因为它不是真的。考虑编写Java以在Android_上构建数据库(例如,使用ADB推送的CSV文件)。然后将其压缩到'/ assets'进行安装。试图完全匹配Android在非Android环境中所期望的结果是我成为一个脆弱的构建步骤。 – Gene 2012-06-06 22:11:24

+0

@ JonDiY212链接中的HTML错误。 – Noumenon 2013-05-14 16:56:46

这个环节有很好的答案Ship an application with a database

+4

以下是在提及的SO问题Andrey中作为答案呈现的链接。这是一篇关于使用Android应用程序发布预建数据库的非常棒的文章: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ – 2010-03-09 18:43:03

+0

类似但很简单:http://www.helloandroid.com/tutorials/how-have-default-database – 2012-04-02 11:16:46

+0

http:// *。com/questions/9109438/using-already-created-database-with-android/9109728#9109728 – 2012-07-26 22:42:30

我要去这里的方式是将资源文件夹中预先填充的数据库。您可以将文件放在那里并按原样使用它们。但是,请注意,存在1MB的大小限制,因此您可能需要分割文件或对其进行压缩。

压缩非常方便,并由os本身支持。

希望这是有帮助:-)

+1

大小限制为1 MB。 – 2014-06-30 15:24:51

的JavaDoc从SQLiteOpenHelper:

一个辅助类来管理数据库 创作和版本管理。您 创建实施 的onCreate(SQLiteDatabase)的子类, onUpgrade(SQLiteDatabase,INT,INT) 和可选的OnOpen(SQLiteDatabase), 这个类需要开放 如果存在数据库的护理,创建它 如果它不不,并且将其升级为 必要。事务用于 确保数据库始终处于 明智状态。

有关示例,请参阅NotePad 示例应用程序中SDK的示例/ 目录中的 NotePadProvider类。

所以,如果你扩展这个类,你有3种方法将在某些情况下被调用,你可以选择,做什么。 那是最好的做法:)

下面是如何创建和填充数据库的例子,你可以做到这一点的应用程序安装,这将创建一个条目,虽然因此对于您想要做的事情可能效率低下。

private static class settingsDatabaseHelper extends SQLiteOpenHelper{ 

    //SQL String for creating the table required 
    private static final String CREATE_SETTINGS_TABLE 
    = "CREATE TABLE tbl_settings(" + 
      "_ID INTEGER PRIMARY KEY AUTOINCREMENT," + 
      "VOIPUSERNAME TEXT," + 
      "VOIPAUTHID TEXT," + 
      "PASSWORD TEXT," + 
      "VOIPDISPLAYNAME TEXT," + 
      "SIPPROXYSERVER TEXT," + 
      "SIPREGISTRAR TEXT," + 
      "SIPREALM TEXT," + 
      "EXPIRESTIME INTEGER);";  

    //constructor 
    public settingsDatabaseHelper(Context context, String name, 
      CursorFactory factory, int version) { 
     super(context, name, factory, version); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_SETTINGS_TABLE); 
     ContentValues initialValues = new ContentValues(); 
      initialValues.put("VOIPUSERNAME", "xxxxx"); 
      initialValues.put("VOIPAUTHID", "xxxxxxxxxx"); 
      initialValues.put("PASSWORD", "xxxxxx"); 
      initialValues.put("VOIPDISPLAYNAME", "xxxxxxxxx"); 
      initialValues.put("SIPPROXYSERVER", "xxxxxxxxxxxxx"); 
      initialValues.put("SIPREGISTRAR", "xxxxxxxxxxx"); 
      initialValues.put("SIPREALM", "xxxxxxxxxx"); 
      initialValues.put("EXPIRESTIME", xxxxxxxxxxx); 
      Log.d("1.6", "gets to here"); 
      db.insert(SETTINGS_TABLE, null, initialValues); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + 
       newVersion + ", which will destroy all old data"); 

     db.execSQL("DROP TABLE IF EXISTS " + SETTINGS_TABLE); 
     onCreate(db); 

    } 

} 

//end helper class 
} 
+0

请解释一下投票吗? – 2012-01-04 13:20:45

+0

如何在应用程序安装上执行此操作?这部分代码是否仅在安装时执行? – 2017-10-01 12:15:22