java - Android:SQL - 代码行为不同

标签 java android sqlite

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

我已经在应用程序的另一部分成功地完成了此操作,并在工作代码之后对该代码进行了建模,但由于某种原因它无法工作。它仅将一个值从一个表移动到另一个表。

我检查了它所获取的表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;
}

我已经一遍又一遍地讨论这个问题,但我肯定遗漏了一些东西。

最佳答案

KEY_FAVNAMEname 在函数内部都不会改变,因此在循环的每次迭代中比较它们不会做任何有用的事情。鉴于您已经在查询中检查匹配的名称,我不明白为什么您还要尝试在循环中进行此检查。只需完全删除 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();
}

关于java - Android:SQL - 代码行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11551308/

相关文章:

Android SQLite 列和索引最佳实践

java - 如何在 AEM 中以编程方式获取复制代理?

java - 使用 JPA 存储枚举自定义值

android - 运行后一个应用程序有两个相同的图标

python - python 字符串的 SQL 语法错误

android - 如何获取数据库模式的版本?

java - 使用 SpringBoot-App 作为 Ubuntu 18.04 服务运行 Tomcat 9

java - UserAccountControl 属性中不存在 PASSWD_CANT_CHANGE 标志

android - Eclipse/Android 原始 txt 文件错误 (Content is not allowed in prolog)

android - 如果设置了 PageTransformer,ViewPager 似乎在滚动时重新启用 clipChildren