Перерыл stackoverflow и везде у всех все просто. Меняем DB_VERSION проверяем в методе onUpgrade , удаляем таблицу и создаем заново (или просто добавляем новые поля).
Я пробовал удалять приложение, чистить данные (clear data в apps manager) , удалял базу из /data/data/myapp/databases/ , пробовал переименовывать базу (test,test.db,new.db,new и т.п) .
База создается, все окей, все таблицы создаются (обновляются), но когда вставляю данные db.insert(TABLE_NAME,null,contentvalues) , то получаю ошибку no such table таблицы которой не должно быть в базе. (В старой схеме присутствовала таблица users)
У меня такое ощущение что есть какой то кеш, который хранит значения переменных и он строго сохранил название таблицы. Ниже пример кода.
Код менеджера базы:
class Database extends SQLiteOpenHelper {
private static final String TAG = "Database";
private static final int DB_VERSION = 1;
private static final String DB_NAME = "notedb";
public static final String TABLE_NAME = "notes";
public static final String NOTE_FIELD = "note";
public Database(Context context)
{
super(context, DB_NAME, null,DB_VERSION);
}
/** it's hooks invoke when getWritableDatabase called **/
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME +
" ( _id integer primary key autoincrement, "
+ NOTE_FIELD + " TEXT)");
Log.i(TAG,"Database create " + DB_NAME);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion < DB_VERSION)
{
// Logs that the database is being upgraded
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
// Kills the table and existing data
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME );
db.execSQL("DROP TABLE IF EXISTS users");
// Recreates the database with a new version
onCreate(db);
}
}
}
Код обработчика:
/* Java - событие на onClick */
Database databaseInstance = new Database(MainActivity.this);
SQLiteDatabase db = databaseInstance.getWritableDatabase();
ContentValues valuesStorage = new ContentValues();
/* prepare */
valuesStorage.put(databaseInstance.NOTE_FIELD,resultsTmp );
db.insert(databaseInstance.TABLE_NAME,null,valuesStorage);
db.close();
Как избавиться от этой ошибки?
ENV: проверяю на эмуляторе через android avd , с эмулятором работаю через шелл adb. Есть девайс нексус 7 2013 и телефон сони, на них тоже самое. Билд проекта идет через ant debug, adb install -r bin/mysppname-debug.apk. ОС Ubuntu 12.04