如何在 Sqlite 的数据库 table 中添加一个附加列?
How to add an additional column in a database table in Sqlite?
我有一个供学生使用的 SQLite table。
我想在学生中为学生性别添加另一列。我有以下代码来创建我的 table。
如何在学生的 table 中添加列 "Gender"?
private static final String TAG = "SyncStudents";
//Declare tables and fields where we will store all the amdins information.
private static final String TABLE_NAME = "studetns";
private static final String COL1 = "id";
private static final String COL2 = "firstname";
private static final String COL3 = "lastname";
private static final String COL4 = "age";
private static final String COL5 = "dob";
private static final String COL6 = "cir";
private static final String COL7 = "class";
private static final String COL8 = "address";
private static final String COL9 = "grade";
public SyncRoutesHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//Create the table
String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COL1 + " INTEGER PRIMARY KEY, " + COL2 + " TEXT," + COL3 + " TEXT," + COL4 + " INTEGER," +
COL5 + " INTEGER," + COL6 + " INTEGER," + COL7 + " TEXT," + COL8 + " TEXT," + COL9 + " INTEGER )";
//Execute the above statement
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);
onCreate(db);
db.execSQL("ALTER TABLE students ADD COLUMN genger TEXT DEFAULT NULL");
}
我尝试在 "OnUpdate" 方法的行下面写,但它不起作用。
db.execSQL("ALTER TABLE students ADD COLUMN gender TEXT DEFAULT NULL");
对于 onUpgrade 到 运行 你必须增加版本号,这是 super 调用的第 4 个参数。所以你需要改变
super(context, TABLE_NAME, null, 1);
到
super(context, TABLE_NAME, null, 2);
However,因为您的 onUpgrade 方法会删除 table 并调用 onCreate 您也可以只更改 onCreate 方法中的代码以包含新列。 这将删除所有现有数据。
如果您需要保留现有数据,那么 onUpgrade 方法应该只有一行来更改 table 并成为 :-
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("ALTER TABLE students ADD COLUMN gender TEXT DEFAULT NULL");
}
- 请注意,您还应该更改 onCreate 方法中的代码以包含新列,以便新安装将包含新列。
您可能希望查看 How To: Android SQLite onUpgrade(),因为这涉及使用 i 和 i1 值如果您随后引入更多架构更改并将版本增加到 3(等等),将会出现问题。
我有一个供学生使用的 SQLite table。
我想在学生中为学生性别添加另一列。我有以下代码来创建我的 table。
如何在学生的 table 中添加列 "Gender"?
private static final String TAG = "SyncStudents";
//Declare tables and fields where we will store all the amdins information.
private static final String TABLE_NAME = "studetns";
private static final String COL1 = "id";
private static final String COL2 = "firstname";
private static final String COL3 = "lastname";
private static final String COL4 = "age";
private static final String COL5 = "dob";
private static final String COL6 = "cir";
private static final String COL7 = "class";
private static final String COL8 = "address";
private static final String COL9 = "grade";
public SyncRoutesHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//Create the table
String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COL1 + " INTEGER PRIMARY KEY, " + COL2 + " TEXT," + COL3 + " TEXT," + COL4 + " INTEGER," +
COL5 + " INTEGER," + COL6 + " INTEGER," + COL7 + " TEXT," + COL8 + " TEXT," + COL9 + " INTEGER )";
//Execute the above statement
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);
onCreate(db);
db.execSQL("ALTER TABLE students ADD COLUMN genger TEXT DEFAULT NULL");
}
我尝试在 "OnUpdate" 方法的行下面写,但它不起作用。
db.execSQL("ALTER TABLE students ADD COLUMN gender TEXT DEFAULT NULL");
对于 onUpgrade 到 运行 你必须增加版本号,这是 super 调用的第 4 个参数。所以你需要改变
super(context, TABLE_NAME, null, 1);
到
super(context, TABLE_NAME, null, 2);
However,因为您的 onUpgrade 方法会删除 table 并调用 onCreate 您也可以只更改 onCreate 方法中的代码以包含新列。 这将删除所有现有数据。
如果您需要保留现有数据,那么 onUpgrade 方法应该只有一行来更改 table 并成为 :-
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("ALTER TABLE students ADD COLUMN gender TEXT DEFAULT NULL");
}
- 请注意,您还应该更改 onCreate 方法中的代码以包含新列,以便新安装将包含新列。
您可能希望查看 How To: Android SQLite onUpgrade(),因为这涉及使用 i 和 i1 值如果您随后引入更多架构更改并将版本增加到 3(等等),将会出现问题。