我正在尝试在一个表中搜索具有相同name
的行中的所有值,然后将它们放入另一个表中。
我已经在我的应用程序的另一部分成功完成了这项工作,并且已经在工作代码之后对此代码进行了建模,但由于某种原因它无法工作。它只从表到表移动一个值。
我已经检查过它所采用的表DATABASE_FAV_EQUIP_TABLE
,其中有多行。
这是不起作用的代码:
//takes all equip data from saved equip set, and puts into equip table
public String AddSavedEquipToEquipTable(String name) {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_EQUIP, KEY_FAVNAME};
ContentValues cv = new ContentValues();
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 equipment = c.getString(iEquip);
cv.put(KEY_EQUIP, equipment);
ourDatabase.insert(DATABASE_EQUIP_TABLE, null, cv);
} while (c.moveToNext() && KEY_FAVNAME == name);
}
return null;
}
这是在我的申请的另一部分工作的代码:
//takes all rows in chest table and puts them into the chosen equipment database
public String AddToEquipmentDBFromChest(String equip) {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_REPS, KEY_EXERCISE, KEY_TIMETYPE};
ContentValues cv = new ContentValues();
Cursor c = ourDatabase.query(DATABASE_CHESTTABLE, columns, KEY_EQUIP + "='" + equip + "'", null, null, null, null);
if (c == null){
return null;
}
else if(c != null && c.moveToFirst()) {
do {
int iReps = c.getColumnIndex(KEY_REPS);
int iExercise = c.getColumnIndex(KEY_EXERCISE);
int iTimeType = c.getColumnIndex(KEY_TIMETYPE);
String reps = c.getString(iReps);
String exercise = c.getString(iExercise);
String time = c.getString(iTimeType);
cv.put(KEY_REPS, reps);
cv.put(KEY_EXERCISE, exercise);
cv.put(KEY_TIMETYPE, time);
ourDatabase.insert(DATABASE_CHOSEN_EQUIP_TABLE, null, cv);
} while (c.moveToNext() && KEY_EQUIP == equip);
}
return null;
}
我一次又一次地看过这个,我不得不错过一些东西。
答案 0 :(得分:1)
你的函数内部KEY_FAVNAME
或name
都没有改变,所以在循环的每次迭代中比较它们都不会有用。鉴于您已经在检查查询中的匹配名称,我无法理解您为什么要尝试在循环中执行此检查。只需完全取消KEY_FAVNAME == name
比较。
顺便提及:
KEY_FAVNAME == name
这不是你如何比较Java中的字符串。这样更好:
KEY_FAVNAME.equals(name)
更偶然的是:你的代码不必要地冗长。您不需要对游标进行空值检查,因为如果查询失败将抛出异常。但是,执行,需要在完成后关闭光标。一个典型的模式是:
Cursor c = db.query(....);
try {
// do all your cursor iteration in here
} finally {
c.close();
}
答案 1 :(得分:0)
while (c.moveToNext() && KEY_FAVNAME == name);
一旦名称不对,这将打破你的do while循环。你不想打破,你只想跳过那条记录。