Android:创建SQLite数据库和表的最佳位置是什么

Android:创建SQLite数据库和表的最佳位置是什么,android,sqliteopenhelper,Android,Sqliteopenhelper,我必须在android应用程序中创建近5-6个表。创建SQLite数据库和5-6表的最佳位置是什么?我可以在初始活动启动时编写所有这些逻辑(使用SQLite open helper方法),但如果这样做,则每次初始活动启动时都会调用它。这意味着每次应用程序启动时,都会执行这些数据库和表的创建逻辑。任何人都可以告诉我们这样做的最佳实践。您可以在主活动中创建数据库和表 但在创建数据库之前,您可以检查 if(exits()) { // do not create } else { // cr

我必须在android应用程序中创建近5-6个表。创建SQLite数据库和5-6表的最佳位置是什么?我可以在初始活动启动时编写所有这些逻辑(使用SQLite open helper方法),但如果这样做,则每次初始活动启动时都会调用它。这意味着每次应用程序启动时,都会执行这些数据库和表的创建逻辑。任何人都可以告诉我们这样做的最佳实践。

您可以在主活动中创建数据库和表

但在创建数据库之前,您可以检查

if(exits())
{
   // do not create
}
else
{
   // create here
}

如果您编写一个类来扩展SQLiteOpenHelper,并在onCreate方法中创建表,那么它将只执行一次。仅当您从设备中完全删除数据/应用程序时,帮助程序才会重新创建数据

首次创建数据库时调用From。这是创建表和初始填充表的地方

给你更多的信息。 在用于扩展SQLiteOpenHelper的类的构造函数中,调用超级构造函数,它接受一些参数。其中之一是数据库版本

如果传递给超级构造函数的此db_版本与上次传递的版本不同,则会调用onUpgrade方法,在onUpgrade()方法中可以调用onCreate()

因此:

  • 删除数据/应用程序
  • 导致调用onUpgrade,该函数调用onCreate()

  • 有创建/更新/删除数据库的方法吗?

    个人,我使用选项:
    创建表(如果不存在)

    因此,打开的辅助对象具有以下参数:

     private static final int VERSION_BDD = 1;
    

    我认为openHelper不会在每次启动时重新创建每个表。

    您可以使用一个内部类来扩展SQLiteOpenHelper,并重写public void onCreate(SqLiteDatabase sqlLiteDatabase)和public void onUpgrade(SqLiteDatabase SqLiteDatabase,int oldVersion,int newVersion)方法

    当磁盘中不存在数据库并且helper类需要创建新数据库时,将调用onCreate

    当数据库版本不匹配时,调用onUpgrade。磁盘上db的版本需要升级到新版本

    private static final class PatientDatabaseHelper extends SQLiteOpenHelper {
    
        private static final String TAG = "PatientProvider";
    
        private static final String DATABASE_NAME = "myPatient.db";
        private static final int DATABASE_VERSION = 1;
        private static final String PATIENT_TABLE = "PATIENT";
    
        private static final String CREATE_TABLE_PATIENT =
                "create table " + PATIENT_TABLE + " ("
                        + PATIENT_KEY_ID + " integer primary key autoincrement, "
                        + PATIENT_NAME + " TEXT NOT NULL, "
                        + PATIENT_FIRST_NAME + " TEXT NOT NULL, "
                        + PATIENT_TEL + " TEXT, "
                        + PATIENT_GSM1 + " TEXT, "
                        + PATIENT_GSM2 + " TEXT, "
                        + PATIENT_BIRTHDATE + " DATE); ";
    
    
    
        public PatientDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
    
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            sqLiteDatabase.execSQL(CREATE_TABLE_PATIENT);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
           //simple case sample - droppin the table
           sqLiteDatabase.execSQL("DROP TABLE IF IT EXISTS " + PATIENT_TABLE);
    
    
          //Create a new One
          onCreate(sqLiteDatabase);
    
        }
    }
    
    取决于android的目标版本,但我认为一个好的方法是使用ContentProvider