Oi gente, tudo bem?
Tenho uma aplicação para android chamada Track Location que está publicada na samsungapps e estou com um problema, ele tem uma base de dados em sqlite com 4 campos: id, latitude, longitude, datetime, tipoLocalização
Porém gostaria de fazer um update no meu app para adicionar mais campos na base de dados, como precisão e altitude, porém se eu fizer um update e incluir esses campos, como estou usando um DBAdapter, o banco de dados da pessoa vai ser apagado(ou melhor, sobreescrito), para que seja adicionados os dois campos a base de dados, porém os registros que estão anteriormente salvos serão apagados.
É possível fazer um update no banco de dados, sem apagar os dados usando
Esse é meu DBAdapter
public class DBAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_LAT = "lat";
public static final String KEY_LON = "lon";
public static final String KEY_DATEANDTIME = "dataehora";
public static final String KEY_PROVIDER = "provider";
private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "basededados";
private static final String DATABASE_TABLE = "coordenadas";
private static final int DATABASE_VERSION = 6;
private static final String DATABASE_CREATE = "CREATE TABLE coordenadas (_id integer primary key autoincrement, "
+ "lat text not null, lon text not null, "
+ "dataehora datetime default current_timestamp, provider text not null);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS coordenadas");
onCreate(db);
}
}
// ---opens the database---
public DBAdapter open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}
// ---closes the database---
public void close() {
DBHelper.close();
}
// ---insert a title into the database---
public long insertTitle(String lan, String lon, String provider, String dateandtime) {
Date hoje = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_LAT, lan);
initialValues.put(KEY_LON, lon);
//initialValues.put(KEY_DATEANDTIME, hoje.toLocaleString());
initialValues.put(KEY_DATEANDTIME, sdf.format(hoje));
initialValues.put(KEY_PROVIDER, provider);
return db.insert(DATABASE_TABLE, null, initialValues);
}
// ---deletes a particular title---
public boolean deleteTitle(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
// ---deletes all titles---
public void deleteAllTitle() {
db.delete(DATABASE_TABLE, null, null);
}
// ---retrieves all the titles---
public Cursor getAllTitles() {
return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_LAT,
KEY_LON, KEY_DATEANDTIME, KEY_PROVIDER }, null, null, null, null, null);
}
// ---retrieves a particular title---
public Cursor getTitleByDay(String date) throws SQLException {
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID, KEY_LAT, KEY_LON, KEY_DATEANDTIME, KEY_PROVIDER }, KEY_DATEANDTIME
+ " like '%" + date +"%'", null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
// ---retrieves a particular title---
public Cursor getTitle(long rowId) throws SQLException {
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID, KEY_LAT, KEY_LON, KEY_DATEANDTIME, KEY_PROVIDER }, KEY_ROWID
+ "=" + rowId, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
// ---updates a title---
public boolean updateTitle(long rowId, String lat, String lon,
String provider, String dateandtime) {
ContentValues args = new ContentValues();
args.put(KEY_LAT, lat);
args.put(KEY_LON, lon);
args.put(KEY_DATEANDTIME, dateandtime);
args.put(KEY_PROVIDER, provider);
return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
}