繁体   English   中英

仅在创建Sqlite数据库时插入示例数据

[英]Insert example data only on creation of Sqlite database

第一次运行android应用时,我需要将一些示例数据放入Sqlite数据库。

我的数据库运行良好,并且我有一个可以将示例数据放入数据库中的方法。 但是我的问题是我在哪里称呼它 我只希望在首次创建数据库时插入示例数据。 用户然后可以将其删除

我的第一个想法是在onCreate中调用我的createSampleData(),但随后该数据库将被递归调用,并且应用程序崩溃。

在我的onCreate中,所有表均已创建。 也许我应该在这些声明中加上一些内容? 我是否应该以某种方式查看是否创建了这些表,然后插入示例数据?

在这里摸索。

公共无效onCreate(SQLiteDatabase数据库){

  String sessionTableQuery = "CREATE TABLE " + SESSION_TABLE + "(" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "comment TEXT," + "date DATETIME DEFAULT CURRENT_TIMESTAMP)"; String exerciseTableQuery = "CREATE TABLE " + EXERCISE_TABLE + " (" + "exercisId INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT," + "weight INTEGER," + "reps INTEGER," + "rpm INTEGER," + "score FLOAT," + "sessionId INTEGER NOT NULL)"; String customTimerSessionTableQuery = "CREATE TABLE " + CUSTOM_TIMER_SESSION_TABLE + "(" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT," + "rounds INTEGER," + "date DATETIME DEFAULT CURRENT_TIMESTAMP)"; String customTimerTableQuery = "CREATE TABLE " + CUSTOM_TIMER_TABLE + " (" + "timerId INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT," + "millis INTEGER," + "metronome BOOL," + "rpm INTEGER," + "type INTEGER," + "sessionId INTEGER NOT NULL)"; database.execSQL(sessionTableQuery); database.execSQL(exerciseTableQuery); database.execSQL(customTimerSessionTableQuery); database.execSQL(customTimerTableQuery); } 

使用作为参数传入的SQLiteDatabase参数将数据插入数据库助手onCreate()中。

不要尝试在onCreate()调用getWritableDatabase()或从那里调用的方法-这会导致您看到的“递归调用”异常。

我解决了,所以我想为自己的问题添加一个答案。

我了解到onCreate仅在首次创建表时被调用(第二个答案: Android-我必须检查表是否存在于SqliteHelper.onCreate()吗?

因此,我只是将示例数据放在onCreate方法的末尾。 另外值得注意的是,您不能在一个execSQL调用中运行多个SQL站点。 否则,我将INSERT与CREATE TABLE语句组合在一起。

public void onCreate(SQLiteDatabase database) {

  [... code code code ...]

   String customTimerSessionTableQuery =
          "CREATE TABLE "
                  + CUSTOM_TIMER_SESSION_TABLE + "("
                  + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                  + "name TEXT,"
                  + "rounds INTEGER,"
                  + "date DATETIME DEFAULT CURRENT_TIMESTAMP)";

  String customTimerTableQuery =
          "CREATE TABLE "
                  + CUSTOM_TIMER_TABLE + " ("
                  + "timerId INTEGER PRIMARY KEY AUTOINCREMENT,"
                  + "name TEXT,"
                  + "millis INTEGER,"
                  + "metronome BOOL,"
                  + "rpm INTEGER,"
                  + "type INTEGER,"
                  + "sessionId INTEGER NOT NULL)";

  database.execSQL(sessionTableQuery);
  database.execSQL(exerciseTableQuery);
  database.execSQL(customTimerSessionTableQuery);
  database.execSQL(customTimerTableQuery);

  // SAMPLE DATA
  database.execSQL("INSERT INTO custom_timer_session VALUES(1,'Tabata',8,'2014-10-21 12:00:00')");
  database.execSQL("INSERT INTO custom_timer VALUES(1,'WORK',20000,0,20,0,1)");
  database.execSQL("INSERT INTO custom_timer VALUES(2,'REST',10000,0,20,1,1)");   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM