Android Sqlite 版本更新
///////////////////////////////////////////////////第一個版本
/////////////////////////////////////////////////
private final static String DB_NAME = "kagoo.db3"; // 資料庫名稱;
private final static int VERSION = 1; // 資料庫版本
// 品號資料表
public final static String TABLENAME = "stock"; // 資料表名稱
public final static String PRODUCTNO = "productno"; // 品號
public final static String NAME = "name"; // 品名
public final static String COUNT = "count"; // 數量
public final static String COST = "cost"; // 單位成本
public final static String SPACE = "space"; // 儲位
//建構式
public StockDBHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 建立庫存資料表
String createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(13) not null primary key," + // 品號-主鍵
"%s nvarchar(60) not null," + // 品名 nvarchar n代表多號語言
"%s INTEGER not null," + // 數量
"%s INTEGER not null," + // 成本
"%s VARCHAR(10) null)" // 儲位
, TABLENAME, PRODUCTNO, NAME, COUNT, COST, SPACE);
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
--------------------------------------------------------------------------------------------------
/////////////////////////////////////////////////
//第二個版本,增加一個資料表
/////////////////////////////////////////////////
private final static String DB_NAME = "kagoo.db3"; // 資料庫名稱;
private final static int VERSION = 2; // 資料庫版本,版本更新為2
// 品號資料表
public final static String TABLENAME = "stock"; // 資料表名稱
public final static String PRODUCTNO = "productno"; // 品號
public final static String NAME = "name"; // 品名
public final static String COUNT = "count"; // 數量
public final static String COST = "cost"; // 單位成本
public final static String SPACE = "space"; // 儲位
// 儲位資料表(新增的資料表)
public final static String SPACENAME = "spacename"; // 儲位資料表名稱
public final static String SPACEMENU = "spacemenu"; // 儲位名稱
//建構式
public StockDBHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 建立庫存資料表
String createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(13) not null primary key," + // 品號-主鍵
"%s nvarchar(60) not null," + // 品名 nvarchar n代表多號語言
"%s INTEGER not null," + // 數量
"%s INTEGER not null," + // 成本
"%s VARCHAR(10) null)" // 儲位
, TABLENAME, PRODUCTNO, NAME, COUNT, COST, SPACE);
db.execSQL(createTable);
// 建立儲位資料表
createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(10) PRIMARY KEY)" // 序號-儲位
, SPACENAME, SPACEMENU);
db.execSQL(createTable);
}
//如果是新安裝的用戶,會執行上面的onCreate()
//如果先前是已經安裝的用戶,會執行下面的 onUpgrade()
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 1) {
// 建立儲位資料表
createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(10) PRIMARY KEY)" // 序號-儲位
, SPACENAME, SPACEMENU);
db.execSQL(createTable);
db.setVersion(newVersion);// 重新設定資料庫版本
}
}
--------------------------------------------------------------------------------------------------
/////////////////////////////////////////////////
//第三個版本,修改庫存資料表結構
/////////////////////////////////////////////////
private final static String DB_NAME = "kagoo.db3"; // 資料庫名稱;
private final static int VERSION = 3; // 資料庫版本,版本更新為3
// 品號資料表
public final static String TABLENAME = "stock"; // 資料表名稱
public final static String PRODUCTNO = "productno"; // 品號
public final static String NAME = "name"; // 品名
public final static String COUNT = "count"; // 數量
public final static String COST = "cost"; // 單位成本
public final static String SPACE = "space"; // 儲位
// 儲位資料表(新增的資料表)
public final static String SPACENAME = "spacename"; // 儲位資料表名稱
public final static String SPACEMENU = "spacemenu"; // 儲位名稱
//建構式
public StockDBHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 建立庫存資料表
String createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(13) not null primary key," + // 品號-主鍵
"%s nvarchar(60) not null," + // 品名 nvarchar n代表多號語言
"%s REAL not null," + // 數量,原本為整數,改為浮點數
"%s REAL not null," + // 成本
"%s VARCHAR(10) null)" // 儲位
, TABLENAME, PRODUCTNO, NAME, COUNT, COST, SPACE);
db.execSQL(createTable);
// 建立儲位資料表
createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(10) PRIMARY KEY)" // 序號-儲位
, SPACENAME, SPACEMENU);
db.execSQL(createTable);
}
//如果是新安裝的用戶,會執行上面的onCreate()
//如果先前是已經安裝的用戶,會執行下面的 onUpgrade()
//Android Sqlite 無法直接更改資料表結構,請參考下面的方法。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 1) { //如果舊用戶的版本為1,直接更新到第3版
// 建立儲位資料表
createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(10) PRIMARY KEY)" // 序號-儲位
, SPACENAME, SPACEMENU);
db.execSQL(createTable);
updateStockTable(db);// 更新庫存資料表結構
db.setVersion(newVersion);// 重新設定資料庫版本
}
if (oldVersion == 2) { //如果舊用戶的版本為2,更新到第3版
updateStockTable(db);// 更新庫存資料表結構
db.setVersion(newVersion);// 重新設定資料庫版本
}
}
private void updateStockTable(SQLiteDatabase db) {
// 1.將舊的資料表名稱更名
String updateTable = String.format("ALTER TABLE %s RENAME TO %s",
TABLENAME, "temptable");
db.execSQL(updateTable);
// 2.創建一個新的資料表為舊表的名稱
String createTable = String.format("Create Table %s(" + // 資料表名稱
"%s VARCHAR(13) not null primary key," + // 品號-主鍵
"%s nvarchar(60) not null," + // 品名 nvarchar n代表多號語言
"%s REAL not null," + // 數量
"%s REAL not null," + // 成本
"%s VARCHAR(10) null)" // 儲位
, TABLENAME, PRODUCTNO, NAME, COUNT, COST, SPACE);
db.execSQL(createTable);
// 3.將舊表寫入到新表
updateTable = String.format("INSERT INTO %s SELECT * FROM %s",
TABLENAME, "temptable");
db.execSQL(updateTable);
// 4.刪除舊表
updateTable = String.format("DROP TABLE %s", "temptable");
db.execSQL(updateTable);
}
以上方法僅供參考。
沒有留言 :
張貼留言