2011-11-19 4 views
0

나는 for 루프를 사용하여 다음과 같은 metod를 사용했지만 나에게 하나의 행만 돌려 주었다. 그래서 루프가 필요하다?SQLite를 사용하여 한 행만 반환하는 경우 루프가 필요합니까? (안드로이드 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; 
} 

내 응용 프로그램 충돌. 이것을 구현하는 올바른 방법은 무엇입니까? 감사.

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

답변

3

이 사용할 수 있습니다 또한

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

를 사용하여 루프에서 문자열 연결은 매우 나쁜 생각입니다. 특히 안드로이드 환경에서는 할당하고 가비지 수집해야하는 StringBuilder 및 String 객체를 많이 생성하기 때문에 안드로이드 환경에서 특히 좋습니다. 당신은 StringBuilder를 사용해야합니다 :

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

오류가 발생하면 메서드는 문자열 유형을 반환해야한다고 말합니다. – Sheldon

+0

if (c.moveToFirst()) return c.getString (1) + "\ n"; else ""을 (를) 반환하십시오. – Thomas

+2

메소드 끝 부분에'return null;'을 넣습니다. –

2

당신은 여전히 ​​첫 번째 위치로 이동하고 행이 있는지 확인해야합니다 : 당신은 단지 하나 개의 결과를 기대하는 경우

+0

+1 - StringBuilder 및 String 객체 할당에 대한 유용한 정보 –

관련 문제