Android 列表到数据库

Android List to Database

我有一个自定义列表,其中包含从在线 mysql 数据库存储的信息。我现在想将此列表放入 sqlite 内部数据库中。 table 已在数据库中创建。我还有一个数据库助手 class,它工作正常。

所有列表信息都存储在 FoodInfoModel class 中,它由 get 和 set 属性组成。

我是否在数据库助手 class 中创建了一个方法来一次插入整个列表?不知道该怎么做。

数据库助手中的当前方法

 public void addDiet(FoodInfoModel foodinfomodel) {


SQLiteDatabase db = getReadableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_DIET_ID, foodinfomodel.getDietID()); 
values.put(KEY_DAY, foodinfomodel.getDay());
values.put(KEY_QTY, foodinfomodel.getQty()); 
values.put(KEY_TIME_FOOD, foodinfomodel.getTime()); 
values.put(KEY_ITEM_FOOD, foodinfomodel.getItem()); 
values.put(KEY_MEASURE, foodinfomodel.getMeasure()); 

// Inserting Row
db.insert("my_diet", null, values);
db.close(); // 
 }

设置List和Adapter的函数

   public void onFetchComplete(List<FoodInfoModel> data) {

    this.data = data;

    System.out.println("data is " + data);

    if(dialog != null)  dialog.dismiss();

    // create new adapter
     adapter = new DietAdapterNew(this, data);
    // set the adapter to list
  setListViewHeightBasedOnChildren(listview);
    listview.setAdapter(adapter);
    adapter.notifyDataSetChanged();


}

如何将该数据列表添加到内部 sqlite 数据库?

谢谢!

是的,您必须在 DatabaseHelper 中创建此类方法 class

public class DatabaseHandler extends SQLiteOpenHelper {
public void insertFoodInfo(ChatBase chat) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_DIET_ID, foodinfomodel.getDietID());
    values.put(KEY_DAY, foodinfomodel.getDay());
    values.put(KEY_QTY, foodinfomodel.getQty());
    values.put(KEY_TIME_FOOD, foodinfomodel.getTime());
    values.put(KEY_ITEM_FOOD, foodinfomodel.getItem());
    values.put(KEY_MEASURE, foodinfomodel.getMeasure());

    db.insert("my_diet", null, values);
    db.close();
}

public void updateFoodInfo(FoodInfoModel  model) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_DIET_ID, foodinfomodel.getDietID());
    values.put(KEY_DAY, foodinfomodel.getDay());
    values.put(KEY_QTY, foodinfomodel.getQty());
    values.put(KEY_TIME_FOOD, foodinfomodel.getTime());
    values.put(KEY_ITEM_FOOD, foodinfomodel.getItem());
    values.put(KEY_MEASURE, foodinfomodel.getMeasure());

    db.update("my_diet", values, KEY_DIET_ID + "=" + model.getId(),null);
    db.close();
}

}

然后在循环中更新或插入每个 FoodInfoModel

对于批量插入可以使用此代码

db.beginTransaction();
    try {
        ...
        db.setTransactionSuccessful();
    } finally {
        db.endTransaction();
    }

您应该创建一个单独的 class 和 public static 函数来处理与 SQL 事务关联的 CRUD(创建、读取、更新和删除)函数。

示例(SQLcrud.java):

public static boolean insertObject(SQLdatabase localDB, Object insertObject)
{
    // Test if things are not null and that the DB is open and writable.

    // Insert the object

    // If insert successful, return TRUE.

    // If anything wrong or insert not successful return FALSE (or int indicating what went wrong.
}

实例:

public static boolean insertLocalAdr(SQLiteDatabase db, PersonAddress adr, boolean deleteCurrent, boolean transaction)
        throws SQLFunctionFailed {
    if(db != null && adr != null)
    {
        try
        {
            // If the connection is open and writable.
            SQLiteGeneral.openAndWritable(db);

            if(deleteCurrent)
            {
                deleteLocalAdr(db, transaction);
            }

            String sqlStmt = GeneralSQLfunctions.getUserAdrInsert(
                    adr,
                    PersonAddress.ADR_TABLE_NAME,
                    GeneralSQLfunctions.databaseType.SQLITE);

            return StmtExecution(db, sqlStmt, transaction);

        }
        catch (SQLException e)
        {
            e.printStackTrace();
            throw new SQLFunctionFailed(e.getMessage());
        }
    }
    else
    {
        throw new SQLFunctionFailed("Given DB or Adr was NULL! FATAL ERROR!");
    }
}

注意:GeneralSQLfunctions.getUserAdrInsert 只是得到一个简单格式化的 INSERT 语句,StmtExecution 只是在 SQL 数据库上执行该语句。他们在那里是为了简化。 SQLiteGeneral.openAndWritable(db) 抛出一个(自定义)SQLFunctionFailed 异常,因此该函数失败并且不会继续。

你基本上还需要一种方法。

public void addDiet(List<FoodInfoModel> foodinfomodels) {
    SQLiteDatabase db = getReadableDatabase();

    for( FoodInfoModel foodinfomodel : foodinfomodels ){
       ContentValues values = new ContentValues();
        values.put(KEY_DIET_ID, foodinfomodel.getDietID()); 
        values.put(KEY_DAY, foodinfomodel.getDay());
        values.put(KEY_QTY, foodinfomodel.getQty()); 
        values.put(KEY_TIME_FOOD, foodinfomodel.getTime()); 
        values.put(KEY_ITEM_FOOD, foodinfomodel.getItem()); 
        values.put(KEY_MEASURE, foodinfomodel.getMeasure()); 

        // Inserting Row
        db.insert("my_diet", null, values);
    }

    db.close(); // 
}

在遍历每个列表项时,您可以启动一个新的 AsyncTask 或 Thread 以使其更快。