[英]Insert data to sqlite database from json parsing
我想在Android數據解析形式json數組數據中將數據插入sqLite數據庫。
我的代碼如下:
1)DBHelperClass-數據庫創建
public class DueAmountDataBHelper extends SQLiteOpenHelper {
public DueAmountDataBHelper(Context context) {
super(context, "abc.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE_PRODUCT_DUE_AMT =
"create table due_amt_tab(" +
"shopId text primary key, " +
"shopName text NOT NULL, " +
"teluguName text NOT NULL, " +
"place text NOT NULL, " +
"dueAmount text NOT NULL " +
")";
db.execSQL(CREATE_TABLE_PRODUCT_DUE_AMT);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public List<DueAmtDBModel> getShopdata() {
List<DueAmtDBModel> data = new ArrayList<>();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from due_amt_tab", null);
StringBuffer stringBuffer = new StringBuffer();
DueAmtDBModel dataModel = null;
while (cursor.moveToNext()) {
dataModel = new DueAmtDBModel();
String shopId, shopName, teluguName, place, dueAmount;
shopId = cursor.getString(cursor.getColumnIndexOrThrow("shopId"));
shopName = cursor.getString(cursor.getColumnIndexOrThrow("shopName"));
teluguName = cursor.getString(cursor.getColumnIndexOrThrow("teluguName"));
place = cursor.getString(cursor.getColumnIndexOrThrow("place"));
dueAmount = cursor.getString(cursor.getColumnIndexOrThrow("dueAmount"));
dataModel.setShopId(shopId);
dataModel.setShopName(shopName);
dataModel.setTeluguName(teluguName);
dataModel.setPlace(place);
dataModel.setDueAmount(dueAmount);
stringBuffer.append(dataModel);
data.add(dataModel);
}
return data;
}
}
到此表我需要插入此json數據
APi - http: //demo4896782.mockable.io/shops
[
{
"shopName": "Hello World.",
"shopTeluguName": "శరవాన గుడ్డు పంపిణీదారులు",
"shopAddress": "Bomanahalli",
"previousDues": 0,
"shopID": 1
},
{
"shopName": "Hello World.",
"shopTeluguName": "శరవాన గుడ్డు పంపిణీదారులు",
"shopAddress": "Bomanahalli",
"previousDues": 20,
"shopID": 2
},
{
"shopName": "Hello World.",
"shopTeluguName": "శరవాన గుడ్డు పంపిణీదారులు",
"shopAddress": "Bomanahalli",
"previousDues": 400,
"shopID": 3
}
]
先感謝您。
以下代碼假定您可以解析服務器中的json數據。
public void insert(JsonObject jsonObject){
ContentValues values = new ContentValues();
SQLiteDatabase db = this.getWritableDatabase();
values.put("shopName", jsonObject.getString('Hello World'));
values.put("shopTeluguName", jsonObject.getString('shopTeluguName'));
values.put("shopAddress", jsonObject.getString('shopAddress'));
values.put("previousDues", jsonObject.getString('previousDues'));
values.put("shopID", jsonObject.getString('shopID'));
db.insert("YOUR TABLE NAME", null, values);
}
現在只需遍歷JSON數組並在循環中調用此函數
首先,表結構應為:
CREATE TABLE IF NOT EXISTS "TABLE_NAME" + "(" + JSON_STRING_KEY + " TEXT ")
現在,為從api獲取的json-array創建模型類。
現在,要將這個json-array 插入表中,您可以執行以下操作:
void insertJsonArrayAsStringToTable(ArrayList<Model> modelList) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, null, null); // delete previous data
ContentValues contentValues = new ContentValues();
// array list as a string; or you can directly put the string you got from
// onResponse(String response) of your volley StringRequest--if you're using it
contentValues.put(JSON_STRING_KEY, new Gson().toJsonTree(modelList).toString());
db.insert(TABLE_NAME, null, contentValues);
db.close();
}
到目前為止,我們已經將來自api的json-array數據作為字符串存儲在表中。
現在,我們可以使用查詢從表中檢索字符串,然后再次使用Gson 將其轉換為對象 (這里是Model
的ArrayList
):
public ArrayList<Model> loadData() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); // now where-clause, so we simply use null as an arguement
res.moveToFirst();
ArrayList<Model> modelList= null;
while (!res.isAfterLast()) { // traverse the table
Type listType = new TypeToken<ArrayList<Model>>() {
}.getType();
modelList= new Gson().fromJson(res.getString(res.getColumnIndex(JSON_STRING_KEY)), listType);
res.moveToNext();
}
res.close();
db.close();
return modelList;
}
PS:如何將來自api的其他可能響應存儲到數據庫中,完全取決於您,是創建單獨的表還是類似的表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.