2014-12-06 69 views
1

比方说,我有一个名为 “表” 与行ID,text1的一个SQLite表,文本2如何比较ArrayList与SQLite表行?

现在我有与内容的ArrayList,让我们说:

  • ID:0,文本1:此是第一个文本,文本2:这是第二个文本
  • ID:21,文本1:布拉布拉,文本2:blabla2 ...

现在我要让源码行和每一个元素之间的对比在arraylist行。 例如我想说删除sqlite表中的每一行,这是不相等与arraylist中的任何行。

我找不到任何包含我的问题的平等线程..也许你可以帮助我或给我一些链接。谢谢你

回答

2

在这里你有一些示例代码。你应该得到的想法:

public void removeRows(DatabaseAdapter dbAdapter, ArrayList<SomeObject> list) { 
       SQLiteDatabase db = dbAdapter.openWritableDatabase(); 
       Cursor rows = db.query(/ *perform some query on SQLite db*/); 
       while(rows.moveToNext()) { 
        int id = rows.getInt(0); 
        String text1 = rows.getString(1); 
        String text2 = rows.getString(2); 
        boolean included = false; 
        for(SomeObject obj : list) { 
         if(obj.getId() == id && obj.getText1().equals(text1) && obj.getText2().equals(text2)) { 
          included = true; 
          break; 
         } 
        } 
        if(!included) { 
         db.delete(/*perform deletion of row*/); 
        } 
       } 
    } 

编辑:要添加到数据库,从列表,它是不是这些对象但在它做这样的事情:

public void addListToDb(DatabaseAdapter dbAdapter, ArrayList<SomeObject> list) { 
     SQLiteDatabase db = dbAdapter.openWritableDatabase(); 
     Cursor rows = db.query(/ *perform some query on SQLite db*/); 
     for(SomeObject obj : list) { 
      boolean included = false; 
      while(rows.moveToNext()) { 
       int id = rows.getInt(0); 
       String text1 = rows.getString(1); 
       String text2 = rows.getString(2); 
       if(obj.getId() == id && obj.getText1().equals(text1) && obj.getText2().equals(text2)) { 
        included = true; 
        break; 
       } 
      } 
      rows.moveToPosition(-1); 
      if(!included) { 
       db.insert(/*perform insert of object*/); 
      } 
     } 
    } 

也有另一种方式来完成这项任务。遍历列表中的元素,并使用SQLiteDatabase#insertWithOnConflict(String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)方法将每个元素添加到数据库,并将SQLiteDatabase.CONFLICT_IGNORE作为conflictAlgorithm传递。如果数据库中尚不存在上述方法,则会添加元素。否则它会忽略它。需要记住的重要一点是,当我们尝试使用CONFLICT_IGNORE冲突算法插入已存在于数据库中的行时,我们将得到-1结果而不是现有行的主键(Android文档在此处具有误导性)。

+0

谢谢我的朋友..我会尝试它 – Steve 2014-12-06 17:27:10

+0

是的,它的工作..我怎么看如果任何列表数组已经在sqlite ..如果没有,然后将数组添加到sqlite – Steve 2014-12-06 22:48:36

+0

我将编辑答案显示你方式,但其实主要想法非常相似。 – 2014-12-06 23:56:29