我试图在一个表(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);
}
}
答案 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
的列索引不会更改,因此我们只需要检索一次索引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)
INSERT INTO SomeTable(C, D)
SELECT A, B
FROM OtherTable
WHERE NOT EXISTS (
SELECT 1
FROM SomeTable
WHERE A = C AND B = D
)