1

我正在尝试根据一个值在一个表 (DATABASE_FAV_EQUIP_TABLE) 中搜索信息,提取该信息,然后将其放入另一个表 (DATABASE_EQUIP_TABLE) - 首先检查它是否不存在。我的代码如下。什么都没有崩溃,我也没有收到任何错误,但是没有信息被放入第二个表(DATABASE_EQUIP_TABLE)。我已经检查了好几次,无法弄清楚为什么这不起作用。

//takes all equip data from saved equip set, and puts into equip table
public String AddSavedEquipToEquipTable(String name) {

    String[] columns = new String[]{KEY_EQUIP};
    Cursor c = ourDatabase.query(DATABASE_FAV_EQUIP_TABLE, columns, KEY_FAVNAME + "='" + name + "'", null, null, null, null);

    if (c == null){
        return null;
    }
    else if(c != null && c.moveToFirst()) {
        do {

            int iEquip = c.getColumnIndex(KEY_EQUIP);
            String equip = c.getString(iEquip);

            CheckEquipTable(equip);

            c.moveToNext();

            } while (KEY_FAVNAME == name);
        }

    return null;
}


public void CheckEquipTable(String equip){

    String[] columns = new String[]{KEY_EQUIP};
    ContentValues cv = new ContentValues();
    Cursor check = ourDatabase.query(DATABASE_EQUIP_TABLE, columns, KEY_EQUIP + "='" + equip + "'", null, null, null, null);

    if(check == null){              
        cv.put(KEY_EQUIP, equip);
        ourDatabase.insert(DATABASE_EQUIP_TABLE, null, cv);
        }

}
4

2 回答 2

1

尝试这个:

public void AddSavedEquipToEquipTable(String name) {
    String[] columns = new String[]{KEY_EQUIP};
    Cursor c = ourDatabase.query(DATABASE_FAV_EQUIP_TABLE, columns, KEY_FAVNAME + "='" + name + "'", null, null, null, null);

    int iEquip = c.getColumnIndex(KEY_EQUIP);
    while(c.moveToNext())
        CheckEquipTable(c.getString(iEquip));
}

我将解释一些变化:

  • 的列索引KEY_EQUIP不会改变,所以我们只需要检索一次索引
  • 在 Java 中,您必须将 Strings 与if(name.equals(KEY_FAVNAME))not进行比较==(KEY_FAVNAME == name)这可能是错误的。
  • ourDatabase.query()永远不会返回 null,最小的结果将是一个空的 Cursor(如cursor.getCount() == 0
  • cursor.moveToNext()返回 true / false,并且当索引为 -1 时 moveToNext() 与 moveToFirst() 相同。此外,如果 Cursor 为空,则 moveToNext() 返回 false。

对于我的建议,请不要犹豫任何其他问题。希望有帮助!

添加

我没有注意到 CheckEquipTable() 第一次检查 Cursor 是否为空:

if(check == null){

像这样改变它:

if(check.getCount() == 0){              
于 2012-06-28T01:46:03.937 回答
0

Um, you should be able to do this solely in sqlite. I can help more if I had the table names / columns, but you would basically do a query like this.

INSERT INTO SomeTable(C, D)
SELECT A, B
FROM OtherTable
WHERE NOT EXISTS (
    SELECT 1
    FROM SomeTable 
    WHERE A = C AND B = D 
)
于 2012-06-28T02:12:43.800 回答