面试题答案
一键面试- 数据库升级步骤
- 定义数据库版本:在
SQLiteOpenHelper
子类的构造函数中定义当前数据库版本。 - 重写
onUpgrade
方法:在该方法中执行数据库升级逻辑,包括添加新字段、创建新表和迁移数据。
- 定义数据库版本:在
- 关键代码
- 数据库帮助类
DBHelper
:
- 数据库帮助类
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydb.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createUsersTable = "CREATE TABLE users (" +
"user_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"username TEXT," +
"age INTEGER)";
db.execSQL(createUsersTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 1 && newVersion == 2) {
// 添加email字段
db.execSQL("ALTER TABLE users ADD COLUMN email TEXT");
// 创建old_users表
db.execSQL("CREATE TABLE old_users (" +
"user_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"username TEXT," +
"age INTEGER, " +
"email TEXT)");
// 迁移数据
db.execSQL("INSERT INTO old_users (user_id, username, age, email) " +
"SELECT user_id, username, age, email FROM users WHERE username LIKE 'old_%'");
// 从users表删除迁移的数据
db.execSQL("DELETE FROM users WHERE username LIKE 'old_%'");
}
}
}
- 使用数据库帮助类:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class MainActivity {
private Context context;
public MainActivity(Context context) {
this.context = context;
}
public void performDatabaseOperations() {
DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 这里可以执行其他数据库操作,如插入、查询等
db.close();
}
}
以上代码实现了将 SQLite
数据库从版本 1 升级到版本 2 的过程,包括添加新字段和迁移特定数据到新表。在实际应用中,可能需要更多的错误处理和优化。