簡體   English   中英

從json解析將數據插入sqlite數據庫

[英]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 將其轉換為對象 (這里是ModelArrayList ):

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM