我想在我的android项目中使用数据库。我编写代码,但我很好奇:当我在手机中运行apk文件时,数据库每次都会再次渲染,或者它只是第一次创建数据库?因为我想第一次建立数据库?我怎么能这样做?
答案 0 :(得分:1)
数据库将在您第一次尝试访问时创建,并且从那时起将持续存在,即使在安装较新版本的应用程序时也是如此。
希望有所帮助。
答案 1 :(得分:1)
您的数据库'helper'应至少覆盖onCreate方法,以便仅在数据库中创建一次表(首次在设备上创建数据库时)....
public class ExampleDatabaseHelper扩展了SQLiteOpenHelper {
public static final String DB_NAME = "ExampleDb";
public static final int DB_VERSION = 1;
public static final String TABLE_NAME = "ExampleTable";
private static final String TABLE_CREATE_SQL =
"CREATE TABLE " + TABLE_NAME +" (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"Name TEXT NOT NULL " +
")";
public ExampleDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE_SQL);
}
}
...在开发应用程序时,您可能希望对数据库结构进行更改,因此您可能希望删除这些现有表并运行新SQL以重新创建它们。
您可以通过覆盖onUpdate方法来执行此操作,但每次更改架构时都必须记住增加数据库版本,以便触发onUpdate ...
public class ExampleDatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "ExampleDb";
public static final int DB_VERSION = 2;
public static final String TABLE_NAME = "ExampleTable";
private static final String TABLE_CREATE_SQL =
"CREATE TABLE " + TABLE_NAME +" (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"Name TEXT NOT NULL, " +
"PhoneNumber TEXT NOT NULL" +
")";
public ExampleDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
在已发布的应用程序中,您可能希望改进onUpdate以保留新格式的先前版本的数据,但在开发过程中,上述操作可以。 这个例子很简单,因为它只处理数据库中的一个表。我建议使用静态方法为每个表创建一个类来处理该表的onCreate和onUpgrade,这些是从帮助程序类中调用的...
public class ExampleDatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "ExampleDb";
public static final int DB_VERSION = 1;
public ExampleDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
ExampleTable1.onCreate(db);
ExampleTable2.onCreate(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
ExampleTable1.onUpgrade(db, oldVersion, newVersion);
ExampleTable2.onUpgrade(db, oldVersion, newVersion);
}
}