我在尝试使用新的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文件发生更改时,更新数据库的最简单方法是什么?
非常感谢!