我有一個Android數據庫SQLite
的問題。如何將新列添加到Android SQLite數據庫?
我有一個包含一個field.StudentFname 一個表和應用工作正常了Android 2.3.1,現在如果我添加一個字段,然後我的應用程序不能正常工作。
誰能幫我誰知道數據庫的非常好,
我有一個Android數據庫SQLite
的問題。如何將新列添加到Android SQLite數據庫?
我有一個包含一個field.StudentFname 一個表和應用工作正常了Android 2.3.1,現在如果我添加一個字段,然後我的應用程序不能正常工作。
誰能幫我誰知道數據庫的非常好,
您可以在onUpgrade()
方法使用ALTER TABLE
功能,像這樣:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
}
顯然,SQLite的將根據列定義不同。
最簡單的方法是在SQLiteOpenHelper class
中添加一些SQL to the onUpgrade()
方法。喜歡的東西:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a new column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE student ADD COLUMN student_rollno INTEGER DEFAULT 0");
}
}
我已經嘗試過,但仍然無法通過使用alter table方法添加新列在upgrate方法。 – Aamirkhan
嗨!我已經嘗試過這我已用在upgrate方法和裏面,我已經把alter table查詢也是如此。但我仍然無法添加新的列到數據庫..但雅當我編寫查詢添加新列並重命名數據庫和表名都比我能夠添加新的列......但與alter table方法的幫助,我無法做到這一點..數據庫和表不是所需的任務..它應該與改變table..still我不能用alter table方法做 – Aamirkhan
如何增加值如自動增量0,1,2,3,.......... – NagarjunaReddy
當我在自己的應用程序上需要幫助時遇到了這個線程,但看到了許多答案的問題。我建議做以下幾點:
private static final String DATABASE_ALTER_TEAM_1 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " string;";
private static final String DATABASE_ALTER_TEAM_2 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " string;";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ALTER_TEAM_1);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ALTER_TEAM_2);
}
}
你要確保代碼將工作當用戶升級1個多版本和更新語句只運行一個升級是必要的。有關更多信息,請查看blog。
如果我們想用默認的String值創建更改的列,該怎麼辦? –
我讀過的最好的解決方案和漂亮的博客btw! – MrBrightside
也許稍微更優雅的方式使用開關來代替的if/then將從任何模式到最近的模式升級...
這裏也對語法一個體面的頁面更改表:http://alvinalexander.com/android/sqlite-alter-table-syntax-examples
public static final String TABLE_TEAM = "team";
public static final String COLUMN_COACH = "coach";
public static final String COLUMN_STADIUM = "stadium";
private static final String DATABASE_ALTER_TEAM_TO_V2 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " TEXT;";
private static final String DATABASE_ALTER_TEAM_TO_V3 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " TEXT;";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion)
{
case 1:
//upgrade from version 1 to 2
db.execSQL(DATABASE_ALTER_TEAM_TO_V2);
case 2:
//upgrade from version 2 to 3
db.execSQL(DATABASE_ALTER_TEAM_TO_V3);
//and so on.. do not add breaks so that switch will
//start at oldVersion, and run straight through to the latest
}
}
我認爲我們不應該檢查類似的
if (newVersion > oldVersion) {
}
條件,因爲如果我們用這個,這意味着每次當我們增量值時間ASE數據庫版本,那麼onUpdrade()將調用和條件將是真實的,所以我們應該檢查這樣的
if(oldVersion==1)
{
}
所以在這種情況下,如果舊版本是2,那麼情況將是錯誤的和用戶與舊版本2將不更新數據庫(哪個用戶只想要版本1),因爲對於那些用戶數據庫已經更新。
我在搜索相同問題時遇到了鏈接。它解釋瞭如何使用升級。 https://thebhwgroup.com/blog/how-android-sqlite-onupgrade
它解釋了爲什麼使用這個下面的代碼
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ALTER_TEAM_1);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ALTER_TEAM_2);
}
}
最簡單的方法在表上創建一個新列添加一些SQL到SQLiteOpenHelper類onUpgrade()方法。像:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
db.execSQL(SQL_MY_TABLE);
case 2:
db.execSQL("ALTER TABLE myTable ADD COLUMN myNewColumn TEXT");
}
}
要添加一個新列到表中,您需要使用ALTER
。在android中,您可以在onUpgrade()
內添加新列。
您可能會奇怪,onUpgrade()
將如何添加新列?
當您實現SQLiteOpenHelper
的子類時,需要在您的類構造函數中調用超類的構造函數:super(context, DB_NAME, null, 1);
。那裏我通過了1
的版本。
當我將版本1
更改爲以上(2
或更高)時,將調用onUpgrade()
。並執行我打算執行的SQL修改。 我的類的構造改變後的版本:像這樣
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 2);//version changed from 1 to 2
}
SQL的修改檢查,父類的構造與我傳遞給super()
版本存儲的SQLite數據庫文件的版本進行比較。如果這些(先前和現在)版本號不同,則調用onUpgrade()
。
代碼應該是這樣的:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// add new columns to migrate to version 2
if (oldVersion < 2) {
db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN school VARCHAR(250)");
}
// add new columns to migrate to version 3
if (oldVersion < 3) {
db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN age INTEGER");
}
}
我做了以下的方法,它是來拆分爲我
如果DB版本:6
Ex : There is a table with 5 columns
當你升級至:7(我在3張表中添加了1個新列)
1. We need to add the columns when creating a table
2. onUpgrade method:
if (oldVersion < 7)
{
db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID);
db.execSQL(DATABASE_ALTER_LAST_UPLOADED);
db.execSQL(DATABASE_ALTER_PAPER_LABEL);
}
其中:「DATABASE_ALTER_ADD_PAPER_PAID」是查詢。
EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE "
+ TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;";
上述後兩種操作它會正常工作的全新安裝的用戶和應用程序升級用戶
喜!我已經嘗試過這我已用在upgrate方法和裏面,我已經把alter table查詢也是如此。但我仍然無法添加新的列到數據庫..但雅當我編寫查詢添加新列並重命名數據庫和表名都比我能夠添加新的列......但與alter table方法的幫助,我無法做到這一點..數據庫和表不是所需的任務..它應該與改變table..still我不能用alter table方法做到這一點.. – Aamirkhan
如何增加值,如0,1,2,3,.......... – NagarjunaReddy
@NagarjunaReddy對於遲到的回覆抱歉。 您可以使用此方法 db.execSQL(「UPDATE table SET key = key + 1 WHERE name =?」,new String [] {name}); – DevYudh