Как обновить базу данных sqlite новыми значениями json

Мне сложно обновить свою базу данных новыми объектами JSON.

Я пытаюсь создать приложение Currecy. Таким образом, всякий раз, когда он подключается к Интернету или меняет валюту, он должен обновлять данные JSON в базе данных SQLite.

В противном случае возьмите старые данные из базы.

Чтобы прочитать файлы в базе данных, у меня есть этот метод:

private void readDataToDb(SQLiteDatabase db) throws IOException, JSONException {


    final String MNU_NAME = "name";
    final String MNU_DESCRIPTION = "description";
    final String MNU_PRICE = "price";
    final String MNU_CATEGORY = "category";
    final String MNU_PHOTO = "photo";

    try {
        String jsonDataString = readJsonDataFromFile();
        JSONArray menuItemsJsonArray = new JSONArray(jsonDataString);

        for (int i = 0; i < menuItemsJsonArray.length(); ++i) {

            String name;
            String description;
            String price;
            String category;
            String photo;


            JSONObject menuItemObject = menuItemsJsonArray.getJSONObject(i);


            name = menuItemObject.getString(MNU_NAME);
            description = menuItemObject.getString(MNU_DESCRIPTION);
            price = menuItemObject.getString(MNU_PRICE);
            category = menuItemObject.getString(MNU_CATEGORY);
            photo = menuItemObject.getString(MNU_PHOTO);


            ContentValues menuValues = new ContentValues();

            menuValues.put(DbContract.MenuEntry.COLUMN_NAME, name);
            menuValues.put(DbContract.MenuEntry.COLUMN_DESCRIPTION, description);
            menuValues.put(DbContract.MenuEntry.COLUMN_PRICE, price);
            menuValues.put(DbContract.MenuEntry.COLUMN_CATEGORY, category);
            menuValues.put(DbContract.MenuEntry.COLUMN_PHOTO, photo);

            db.insert(DbContract.MenuEntry.TABLE_NAME, null, menuValues);




            Log.d(TAG, "Inserted Successfully " + menuValues );
        }


    } catch (JSONException e) {
        Log.e(TAG, e.getMessage(), e);
        e.printStackTrace();
    }

}

И в методе onCreate в DBHelper:

@Override
public void onCreate(SQLiteDatabase db) {

    final String SQL_CREATE_BUGS_TABLE = "CREATE TABLE " + DbContract.MenuEntry.TABLE_NAME + " (" +
            DbContract.MenuEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            DbContract.MenuEntry.COLUMN_NAME + " TEXT UNIQUE NOT NULL, " +
            DbContract.MenuEntry.COLUMN_DESCRIPTION + " TEXT NOT NULL, " +
            DbContract.MenuEntry.COLUMN_PRICE + " TEXT NOT NULL, " +
            DbContract.MenuEntry.COLUMN_CATEGORY + " TEXT NOT NULL, " +
            DbContract.MenuEntry.COLUMN_PHOTO + " INTEGER NOT NULL " + " );";


    db.execSQL(SQL_CREATE_CURRENCY_TABLE);
    Log.d(TAG, "Database Created Successfully" );


    try {
        readDataToDb(db);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }


}

Я пытался найти решение для обновления, также используя,

db.update(DbContract.MenuEntry.TABLE_NAME, menuValues, null,null);

чтобы использовать в другом методе, а затем использовать его в Oncreate, но это не сработало.

Как я читал, изменение версии базы данных каждый раз в приложении и ее использование в методе onUpgrade помогает, но является ли это правильным подходом к постоянному изменению версии базы данных?

Подводить итоги:

Каким будет самый простой способ обновить базу данных при изменении файла JSON?

Большое спасибо !

Проверьте документацию Android developer.android.com/training/data-storage/sqlite.html

Fazal Hussain 11.04.2018 14:07
2
1
591
0

Другие вопросы по теме