Java 如果使用SQLite只返回一行,是否需要一个循环?(安卓开发)

Java 如果使用SQLite只返回一行,是否需要一个循环?(安卓开发),java,android,Java,Android,我一直在使用下面的方法使用for循环,但我突然想到我只返回一行,所以有必要使用循环吗 i、 e我的代码类似于: public String topSwimmerSponsor() { Cursor c = ourDatabase.rawQuery("SELECT " + KEY_SWIMMERLAPS + " * " + KEY_SPONSOR + " AS result, " + KEY_NAME + " FROM " + DATABAS

我一直在使用下面的方法使用for循环,但我突然想到我只返回一行,所以有必要使用循环吗

i、 e我的代码类似于:

public String topSwimmerSponsor() {
    Cursor c = ourDatabase.rawQuery("SELECT " + KEY_SWIMMERLAPS + " * "
            + KEY_SPONSOR + " AS result, " + KEY_NAME + " FROM "
            + DATABASE_TABLE + " ORDER BY result DESC limit 1", null);

    String result = "";

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = result + c.getString(1) + "\n";
    }
    return result;
}
但是,我试图将其更改为以下内容:

public String topSwimmerSponsor() {
    Cursor c = ourDatabase.rawQuery("SELECT " + KEY_SWIMMERLAPS + " * "
            + KEY_SPONSOR + " AS result, " + KEY_NAME + " FROM "
            + DATABASE_TABLE + " ORDER BY result DESC limit 1", null);

    String result = "";

    result = result + c.getString(1) + "\n";

    return result;
}

但是我的应用程序崩溃了。正确的方法是什么?谢谢

如果您只希望得到一个结果,可以使用以下方法:

if(c.moveToFirst())
  return c.getString(1) + "\n";

如果您只希望得到一个结果,可以使用以下方法:

if(c.moveToFirst())
  return c.getString(1) + "\n";

您仍应移动到第一个位置并检查是否有行:

if (c.moveToFirst()) {
    result = c.getString(1) + "\n";
}
此外,在循环中使用字符串连接是一个非常糟糕的主意,尤其是在android环境中,因为它会创建大量临时StringBuilder和字符串对象,这些对象必须进行分配和垃圾收集。您应该使用StringBuilder:

StringBuilder builder = new StringBuilder();
for (...) {
    builder.append(...);
    builder.append(...);
}
String result = builder.toString();

您仍应移动到第一个位置并检查是否有行:

if (c.moveToFirst()) {
    result = c.getString(1) + "\n";
}
此外,在循环中使用字符串连接是一个非常糟糕的主意,尤其是在android环境中,因为它会创建大量临时StringBuilder和字符串对象,这些对象必须进行分配和垃圾收集。您应该使用StringBuilder:

StringBuilder builder = new StringBuilder();
for (...) {
    builder.append(...);
    builder.append(...);
}
String result = builder.toString();

我得到一个错误,它说该方法必须返回字符串类型。如果(c.moveToFirst())返回c.getString(1)+“\n”;否则返回“”;put
返回null在方法的末尾。我得到一个错误,它说该方法必须返回字符串类型。如果(c.moveToFirst())返回c.getString(1)+“\n”;否则返回“”;put
返回null在方法末尾。+1-有关StringBuilder和字符串对象分配的详细信息+1-有关StringBuilder和字符串对象分配的详细信息