2011-11-19 19 views
0

我一直在使用下面的metod來使用for循環,但是在我看來,我只返回一行 - 所以它有必要有一個循環?如果我只使用SQLite返回一行,是否需要循環? (Android Dev)

即我的代碼類似於此:

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; 
} 

但是我的應用程序崩潰。什麼是實施這個的正確方法?謝謝。

回答

3

如果你只期待一個結果,你可以使用這個:

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

我得到一個錯誤,它說該方法必須返回一個字符串類型。 – Sheldon

+0

if(c.moveToFirst()) return c.getString(1)+「\ n」; else return「」; – Thomas

+2

把'return null;'放在方法的末尾。 –

2

你還是應該移動到第一位置,並檢查是否有行:

if (c.moveToFirst()) { 
    result = c.getString(1) + "\n"; 
} 

此外,使用循環中的字符串連接是一個非常糟糕的主意,尤其是在android環境中,因爲它會創建大量臨時StringBuilder和String對象,這些對象必須進行分配和垃圾回收。你應該使用一個StringBuilder:

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

+1 - 有關StringBuilder和String對象分配的詳細信息 –

相關問題