【发布时间】:2014-01-03 17:14:53
【问题描述】:
我已经开发了一个应用程序并且我有一个数据库。
当我使用新列升级数据库时,我会丢失其中的数据。
我创建了两个表,现在如果我想添加新列怎么办?我应该更改表还是应该删除并重新创建它?如果我只是更改表会丢失数据吗?
这是数据库类:
public class data extends SQLiteOpenHelper {
static String dbName="furniture_info.db";
static String logintable="login";
static String rowid="log_masterid";
static String UID="email_id";
static String passw="password";
static String flag="active_flag";
static String cName="username";
static String Age="age";
static String colDept="dept";
static String sid="std_id";
static String stinfo="stdinfo";
static String sname="name";
static String phone="phno";
static String city="user_city";
static String state="user_state";
static String pincode="user_pincode";
static String user_id="user_id";
static String user_info="user_info";
public data(Context con) {
// TODO Auto-generated constructor stub
super(con,dbName,null,11);
}
@Override
public void onCreate(SQLiteDatabase db)
{
boolean a=checkDataBase();
if(a==false)
{
String stmt="CREATE TABLE "+logintable+" ("+rowid+" INTEGER PRIMARY KEY, "
+UID+ " TEXT, "+ passw + " TEXT, "+ cName +" TEXT, "+ phone +" INTEGER, "+flag+" INTEGER "+")";
//String stmt="CREATE TABLE "+colltable+" ("+colID+ " TEXT PRIMARY KEY,"+")";
db.execSQL(stmt);
String stm="CREATE TABLE user_info (" + user_id +" INTEGER, "+ city +" TEXT, "+ state +" TEXT, "+ pincode + " INTEGER , foreign key ("+ user_id +") references "+ logintable+"("+ rowid +") )";
db.execSQL(stm);
}
//db.execSQL("CREATE TABLE "+ stinfo +" ("+sname+ " TEXT, " +Age+ " TEXT, "+ phone +" TEXT " +sid+" INTEGER NOT NULL ,FOREIGN KEY ("+sid+") REFERENCES "+colltable+" ("+sid+"));");
// Toast.makeText(null, "table created", Toast.LENGTH_LONG).show();
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldv,int newv)
{
//final String ALTER_TBL = "ALTER TABLE " + logintable +" ADD COLUMN"+ passw+" text,"+flag+"INTEGER;";
// deleteDatabase(dbName);
//Toast.makeText(null, "database deleted", Toast.LENGTH_LONG).show();
//File dbFile =new File(getDatabasePath(dbName));
//db.deleteDatabase(dbFile);
db.execSQL("DROP TABLE IF EXISTS " + logintable);
onCreate(db);
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase("//data/data/com.furniture/databases/furniture_info.db", null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
// database doesn't exist yet.
}
return checkDB != null ? true : false;
}
我知道当我增加数据库的版本号时它会升级,但问题是我丢失了其中的数据。
【问题讨论】:
标签: android