如何将值从数组填充到SQLite数据库

时间:2019-02-11 20:32:17

标签: android arrays sqlite cursor

我的App通过一个EditText字段接收用户输入数据,并将其添加到Array中。然后,应用程序使用代码通过数据库帮助器控制器将数组传递给帮助器类

controller.populateStockMaterialDB(InventoryData); 

在我的数据库助手中,我有以下代码来读取数组,并使用Array中的6个值填充数据库表

public void populateStockMaterialDB(ArrayList<String> inventoryData) {
        SQLiteDatabase db = this.getWritableDatabase();

        for (int i=0; i< inventoryData.size(); i++) {
         ContentValues contentValues = new ContentValues();
            contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_MATERIAL, inventoryData.get(i));
            contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_UOM_STORE, inventoryData.get(i));
            contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_UOM_AVAILABLE, inventoryData.get(i));
            contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_QUANTITY_STORE, inventoryData.get(i));
            contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_QUANTITY_AVAILABLLE, inventoryData.get(i));
            contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_MOQ, inventoryData.get(i));

            this.getWritableDatabase().insertOrThrow(FoodoclockContract.FoodolockEntry.TABLE_NAME7, "", contentValues);
        }
    }

将Array数据填充到表中,但是不正确。我没有用6列填充数据的一行,而是用6列填充数据的6行。 我希望代码有所帮助。谢谢

1 个答案:

答案 0 :(得分:0)

您正在遍历数组中的每个项目并填充所有列,因此行数和列数相等,它们等于数组的长度。

您应该做的是,删除循环并使用索引手动写入每一列

public void populateStockMaterialDB(ArrayList<String> inventoryData) {
    SQLiteDatabase db = this.getWritableDatabase();

     ContentValues contentValues = new ContentValues();
        contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_MATERIAL, inventoryData.get(1));
        contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_UOM_STORE, inventoryData.get(2));
        contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_UOM_AVAILABLE, inventoryData.get(3));
        contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_QUANTITY_STORE, inventoryData.get(4));
        contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_QUANTITY_AVAILABLLE, inventoryData.get(5));
        contentValues.put(FoodoclockContract.FoodolockEntry.COLUMN_MOQ, inventoryData.get(6));

        this.getWritableDatabase().insertOrThrow(FoodoclockContract.FoodolockEntry.TABLE_NAME7, "", contentValues);
}

应该可以解决您的问题。但是解决此问题的更好方法是使用模型保存数据库中每个列的值,然后映射到相应的数据,只有一个类,其中包含要保存在数据库中的每个属性的字符串字段然后使用每个字段的值填充数据库。