首页 > 解决方案 > 如何将数组中的值填充到 SQLite 数据库中

问题描述

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

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 列。我将不胜感激我的代码的一些帮助。谢谢你

标签: androidarrayssqlitecursor

解决方案


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

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

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

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


推荐阅读