gpt4 book ai didi

java - Android SQLiteOpenHelper 的新实例是否会在应用程序目录中创建新数据库?

转载 作者:行者123 更新时间:2023-12-02 04:32:16 25 4
gpt4 key购买 nike

我在android中创建了一个数据库助手类,我担心的是,每次我创建助手类的新实例时,android系统是否会创建一个新的数据库来覆盖所有以前的数据?

public class UserHelper extends SQLiteOpenHelper {

public static final int DATABASE_VERSION = 1;

public static final String DATABASE_NAME = "user.db";

public UserHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

@Override
public void onCreate(SQLiteDatabase db) {

final String SQL_CREATE_USER_PROFILE_TABLE = "CREATE TABLE " + UserProfileEntry.TABLE_NAME +
" (" +
UserProfileEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
UserProfileEntry.COLUMN_NAME_PARENT_NAME + " TEXT NOT NULL, " +
UserProfileEntry.COLUMN_NAME_PARENT_PHONE + " INTEGER UNIQUE NOT NULL, " +
UserProfileEntry.COLUMN_NAME_PARENT_EMAIL + " TEXT UNIQUE NOT NULL, " +
UserProfileEntry.COLUMN_NAME_PARENT_PASSWORD + " TEXT NOT NULL, " +
UserProfileEntry.COLUMN_NAME_CHILD_NAME + " TEXT NOT NULL, " +
UserProfileEntry.COLUMN_NAME_CHILD_DOB + " TEXT NOT NULL, " +
UserProfileEntry.COLUMN_NAME_CHILD_GENDER + " TEXT NOT NULL, " +
" UNIQUE ( " + UserProfileEntry.COLUMN_NAME_PARENT_PHONE + ", " +
UserProfileEntry.COLUMN_NAME_PARENT_EMAIL + " ) ON CONFLICT IGNORE " +
");";

final String SQL_CREATE_ALL_ACTIVITIES_TABLE = "CREATE TABLE " + AllActivitiesEntry.TABLE_NAME +
" ( " +
AllActivitiesEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
AllActivitiesEntry.COLUMN_NAME_ACTIVITY_NAME + " TEXT UNIQUE NOT NULL, " +
AllActivitiesEntry.COLUMN_NAME_MIN_AGE + " INTEGER NOT NULL );";

final String SQL_CREATE_USER_ACTIVITIES_TABLE = "CREATE TABLE " +
UserActivitiesEntry.TABLE_NAME + " (" +
UserActivitiesEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
UserActivitiesEntry.COLUMN_NAME_USER_ID + " INTEGER NOT NULL, " +
UserActivitiesEntry.COLUMN_NAME_USER_ACTIVITY_ID + " INTEGER NOT NULL, " +

//Setting up COLUMN_USER_ID as a foreign key to UserProfileTable
" FOREIGN KEY ( " + UserActivitiesEntry.COLUMN_NAME_USER_ID + " ) REFERENCES " +
UserProfileEntry.TABLE_NAME + " ( " + UserProfileEntry._ID + " ), " +

//Setting up COLUMN_USER_ACTIVITY_ID as a foreign key to AllActivitiesTable
" FOREIGN KEY ( " + UserActivitiesEntry.COLUMN_NAME_USER_ACTIVITY_ID +
" ) REFERENCES " + AllActivitiesEntry.TABLE_NAME +
" ( " + AllActivitiesEntry._ID + " ) );";

db.execSQL(SQL_CREATE_USER_PROFILE_TABLE);
db.execSQL(SQL_CREATE_ALL_ACTIVITIES_TABLE);
db.execSQL(SQL_CREATE_USER_ACTIVITIES_TABLE);
}

public static boolean checkDatabaseExists(Context context, String databaseName) {
File dbFile = context.getDatabasePath(databaseName);
return dbFile.exists();
}
}

最佳答案

如果数据库不存在,它将创建一个,并使用构造函数中指定的版本号。然后 Android 将调用您的 onCreate() 方法来创建表。

如果数据库确实存在,则将使用新旧版本号调用 onUpgrade()。这允许您为使用旧版本应用程序并升级到新版本的用户添加缺失的表。

关于java - Android SQLiteOpenHelper 的新实例是否会在应用程序目录中创建新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com