Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:SQL-代码表现不同_Java_Android_Sqlite - Fatal编程技术网

Java Android:SQL-代码表现不同

Java Android:SQL-代码表现不同,java,android,sqlite,Java,Android,Sqlite,我试图在一个表中搜索具有相同名称的行中的所有值,然后将它们放入另一个表中 我已经在我的应用程序的另一部分中成功地完成了这项工作,并按照工作代码对该代码进行了建模,但由于某些原因,它无法工作。它只在表之间移动一个值 我已经检查了它所从的表,DATABASE\u FAV\u equipment\u table,其中有多行 以下是不起作用的代码: //takes all equip data from saved equip set, and puts into equip table public

我试图在一个表中搜索具有相同
名称的行中的所有值,然后将它们放入另一个表中

我已经在我的应用程序的另一部分中成功地完成了这项工作,并按照工作代码对该代码进行了建模,但由于某些原因,它无法工作。它只在表之间移动一个值

我已经检查了它所从的表,
DATABASE\u FAV\u equipment\u 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;
}
我一次又一次地重复这件事,我肯定错过了什么

while (c.moveToNext() && KEY_FAVNAME == name);

一旦名称不正确,就会中断do-while循环。你不想破坏,你只想跳过那条记录。

函数中的
键FAVNAME
更改,因此在循环的每次迭代中比较它们不会有任何用处。鉴于您已经在查询中检查匹配名称,我不明白您为什么还要在循环中进行此检查。只需将
键\u FAVNAME==name
的比较全部去掉


顺便说一下:

KEY_FAVNAME == name
这不是Java中比较字符串的方式。这样更好:

KEY_FAVNAME.equals(name)

更顺便说一句:您的代码是不必要的冗长。您不需要对游标进行null检查,因为如果查询失败,将引发异常。但是,完成后,您需要关闭光标。一个典型的模式是:

Cursor c = db.query(....);
try {

    // do all your cursor iteration in here

} finally {
    c.close();
}

但在我的应用程序的另一部分,这很好。你建议我用什么来代替那个?非常感谢!这一切都很有道理,而且现在效果很好。我感谢你的帮助!