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

controller.populateStockMaterialDB(InventoryData);


在我的数据库助手中,我有以下代码读取数组,并使用数组中的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);
        }
    }


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

最佳答案

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

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

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


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

07-28 02:33
查看更多