如何使用新的JSON值更新SQLITE数据库

时间:2018-04-11 12:02:43

标签: java android json database sqlite

我在尝试使用新的JSON对象更新数据库时遇到了一些困难。

我正在尝试使用Currecy应用程序。因此,无论何时连接到互联网或货币更改,它都必须更新SQLite数据库中的JSON数据。

否则,从数据库中获取旧数据。

要将文件读入数据库,我有这个方法:

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();
    }

}

在DBHelper的onCreate方法中:

@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文件发生更改时,更新数据库的最简单方法是什么?

非常感谢!

0 个答案:

没有答案