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

Java 仅在创建Sqlite数据库时插入示例数据,java,android,sql,sqlite,Java,Android,Sql,Sqlite,当我的android应用程序第一次运行时,我需要将一些示例数据放入Sqlite数据库 我的数据库工作得很好,我有一种将示例数据放入数据库的工作方法。但是我的问题是,我把它叫做哪里?我只希望在首次创建数据库时插入示例数据。然后用户可以将其删除 我的第一个想法是在onCreate中调用我的createSampleData(),但随后将递归调用db,应用程序将崩溃 在我的onCreate中,所有表都是创建的。也许我应该在那些陈述中加些什么?我是否应该看看是否创建了这些表,然后插入示例数据 在这里摸索

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

我的数据库工作得很好,我有一种将示例数据放入数据库的工作方法。但是我的问题是,我把它叫做哪里?我只希望在首次创建数据库时插入示例数据。然后用户可以将其删除

我的第一个想法是在onCreate中调用我的createSampleData(),但随后将递归调用db,应用程序将崩溃

在我的onCreate中,所有表都是创建的。也许我应该在那些陈述中加些什么?我是否应该看看是否创建了这些表,然后插入示例数据

在这里摸索

public void onCreate(SQLiteDatabase){


使用作为参数传入的
SQLiteDatabase
参数,在database helper
onCreate()
中插入数据


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

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

我了解到只有在第一次创建表时才调用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)");   }

你使用的是
SQLiteOpenHelper
?@CL。实际上我想我解决了它…onCreate似乎只有在第一次创建数据库时才被调用。所以我将在其中放入一些SQL。我将给出一个答案。是的,我使用的是sqliteopenhelperhanks。这正是发生的事情。
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)");   }