Выпуск 1.
Метод onUpgrade является частью метода onCreate, чтобы переместить его за пределы метода onCreate.Например: -
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Food.db";
public static final String TABLE_NAME = "food_table";
public static final String ID = "ID";
public static final String DESCRIPTION = "DESCRIPTION";
public static final String INGREDIENTS = "INGREDIENTS";
public static final String METHOD = "METHOD";
public static final String NOTES = "NOTES";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
try {
SQLiteDatabase db = this.getWritableDatabase();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(" CREATE TABLE " + TABLE_NAME + " (" +
ID + " TEXT PRIMARY KEY, " +
DESCRIPTION + " TEXT, " +
INGREDIENTS + " TEXT, " +
METHOD + " TEXT, " +
NOTES + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
- Обратите внимание, это может быть просто из-за того, что вы ввели неверный код, поскольку код, который вы показали, скорее всего, не скомпилируется.
Проблема 2.
Скорее всего, вы ищете неправильное место для базы данных / таблицы.
Следующий код в качестве активирующего действия (MainActivity, используемый в коде) подтвердит, что база данных работаетПосле создания и таблицы она также распечатает местоположение базы данных: -
public class MainActivity extends AppCompatActivity {
DatabaseHelper mDBHlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBHlpr = new DatabaseHelper(this);
Cursor csr = mDBHlpr.getReadableDatabase().query("sqlite_master",null,null,null,null,null,null);
Log.d("DBLOCATION",this.getDatabasePath(DatabaseHelper.DATABASE_NAME).getAbsolutePath());
while (csr.moveToNext()) {
Log.d(
"DBINFO",
"Found a " + csr.getString(csr.getColumnIndex("type")) +
" named " + csr.getString(csr.getColumnIndex("name"))
);
}
csr.close();
}
}
При запуске (используя только приведенный выше код) результат будет: -
11-14 00:33:23.565 1246-1246/? D/DBLOCATION: /data/data/so53291104.so53291104/databases/Food.db
11-14 00:33:23.565 1246-1246/? D/DBINFO: Found a table named android_metadata
11-14 00:33:23.565 1246-1246/? D/DBINFO: Found a table named food_table
11-14 00:33:23.565 1246-1246/? D/DBINFO: Found a index named sqlite_autoindex_food_table_1
То есть приведенный выше код создает базу данных, таблицу и индекс в столбце food (если он еще не существует), а затем записывает некоторую информацию о фактической базе данных.
Обратите внимание на DBLOCATIONбудет зависеть от вашего пакета и не будет соответствовать описанному выше.
Вы можете удалить данные приложения или удалить приложение перед запуском любого исправленного кода.