Android:Sqlite - 将值从一个表移动到另一个表

时间:2012-06-28 01:24:46

标签: android sqlite

我试图在一个表(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);
        }

}

2 个答案:

答案 0 :(得分: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中,您必须将字符串与if(name.equals(KEY_FAVNAME))进行比较而不是==(KEY_FAVNAME == name)可能是错误的。
  • ourDatabase.query()永远不会返回null,最小的结果将是一个空的Cursor(如cursor.getCount() == 0中所示)
  • cursor.moveToNext()返回true / false,当索引为-1时,moveToNext()与moveToFirst()相同。此外,如果Cursor为空,则moveToNext()返回false。

根据我的建议,不要犹豫任何其他问题。希望有所帮助!

<强>加成

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

if(check == null){

像这样改变:

if(check.getCount() == 0){              

答案 1 :(得分:0)

嗯,你应该只能在sqlite中做到这一点。如果我有表名/列,我可以提供更多帮助,但你基本上会做这样的查询。

INSERT INTO SomeTable(C, D)
SELECT A, B
FROM OtherTable
WHERE NOT EXISTS (
    SELECT 1
    FROM SomeTable 
    WHERE A = C AND B = D 
)