Так что я новичок в работе с SQlite и android. Я начал с создания класса DataBase Manager, как показано ниже:
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseManager extends SQLiteOpenHelper{
static final String dbName ="LCInstore";
static final String allIcons = "Icons";
static final String homeIcons = "HomeScreenIcons";
static final String colIconID = "IconID";
static final String colID = "ID";
static final String colImage = "IconImage";
static final String colLabel = "IconLabel";
static final String colName = "IconName";
public DataBaseManager(Context context) {
super(context, dbName, null, 0); // starting value is zero must change on upgrades
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
// Create Icon Table if does not exist
db.execSQL("CREATE TABLE IF NOT CREATED"+ allIcons +"" +
"("+colIconID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
colName + " TEXT," +
colImage + " TEXT," +
colLabel + "TEXT)");
// Create HomeScreen Icons Table if does not exist
db.execSQL("CREATE TABLE IF NOT EXIST" + homeIcons+"" +
"("+colID+" INTEGER NOT NULL, FOREIGN KEY ("+colID+") REFERENCES" +
""+allIcons+" ("+colIconID+"));");
InsertIcons(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS "+allIcons);
}
private void InsertIcons(SQLiteDatabase db) {
ContentValues cv=new ContentValues();
cv.put(colIconID, 1);
cv.put(colName, "Icon1");
cv.put(colImage, "icon_one");
cv.put(colLabel, "ONE");
db.insert(allIcons, colIconID, cv);
cv.put(colIconID, 2);
cv.put(colName, "Icon2");
cv.put(colImage, "icon_two");
cv.put(colLabel, "TWO");
db.insert(allIcons, colIconID, cv);
cv.put(colIconID, 3);
cv.put(colName, "Icon3");
cv.put(colImage, "icon_three");
cv.put(colLabel, "THREE");
db.insert(allIcons, colIconID, cv);
db.close();
}
public void AddHomeScreenIcon(int id){
SQLiteDatabase db=this.getWritableDatabase();
//HELP
// Need to check if id already exists in colID of homeIcons TABLE
// and if it doesn't do this
Cursor c = db.rawQuery("select * from "+ homeIcons +" where colID = " +id, null);
int numFound = c.getCount();
if(numFound<1){
ContentValues cv=new ContentValues();
cv.put(colID, id);
db.insert(homeIcons, colID, cv);
}
// else do nothing
}
public void DeleteHomeScreenIcon (int id){
SQLiteDatabase db=this.getWritableDatabase();
db.delete(homeIcons, "id = " +id, null);
// HELP
//Need to find row of homeIcons table that matches id and delete it
db.close();
}
}
вы заметите, что в моих последних двух методах, которые я поставил // ПОМОГИТЕ, эти комментарии - вот что мне нужно для помощи ..
НЕ ВОПРОС: если позднее я обновлю свое приложение, я предполагаю, что оно не избавится от БД и не внесет в него какие-либо изменения ... но как вызывается onUpgrade ... и как я могу контролировать это в обновлениях?