2013-03-15 4 views
-2

루프를 사용하지 않고 모든 레코드를 가져 오는 방법은 무엇입니까? 루프는 1000 개 이상의 레코드를 얻는 좋은 방법이 아닙니다. 예를 들어android에서 전체 sqlite 레코드 얻기

:

public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<Contact>(); 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Contact contact = new Contact(); 
      contact.setID(Integer.parseInt(cursor.getString(0))); 
      contact.setName(cursor.getString(1)); 
      contact.setPhoneNumber(cursor.getString(2)); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 
    return contactList; 

그러나이되지는이 작업을 완료하기 위해 수행 않습니다 record.How 많은 시간 지금도, 좋 당신이 5000이 할 수있는 최선의 방법입니다!

어떻게 생각하십니까?

감사합니다,

+0

ListList (대신 ArrayAdapter)에 CursorAdapter를 사용하고 POJO에 데이터를로드하지 마십시오 ... 목록이 더 빠르지 만 (많이) – Selvin

답변

0

Cursor 자체는 항목의 "목록"을 나타냅니다. 그래서 데이터베이스에서 검색 한 후 데이터로 어떤 작업을해야하는지 묻습니다.

ListView에서 시작하기 만하면 CursorAdapter을 사용해야합니다. "목록"을 구문 분석하고 네트워크상의 항목 또는 ListView에 표시하는 항목 이외의 항목을 보내야하는 경우에도 실제 목록은 필요하지 않습니다. Cursor에서 직접 필요한 항목을 추출하여 보내주십시오.

자신을 되풀이하는 단점이 있으므로 다시 지적해야합니다. 실제로 데이터로 무엇을하고 싶은지에 달려 있습니다.

+0

데이터 표시에 문제가 없습니다.사용자가 모든 데이터를 볼 수있는 솔루션을 원한다. (페이징 또는 다른 것) –

+1

이미 위에서 언급 한 것처럼 CursorAdapter를 사용한다. –

1
Select * from table; 

그게 모든 ... 안드로이드

:

cursor.moveToFirst(); 
while (!cursor.isAfterLast()) { 
    Contact contact = new Contact(); 
     contact.setID(Integer.parseInt(cursor.getString(0))); 
     contact.setName(cursor.getString(1)); 
     contact.setPhoneNumber(cursor.getString(2)); 
     // Adding contact to list 
     contactList.add(contact); 
} 
+0

이 점을 알고 있지만 어떻게 처리 할 수 ​​있는지 잘 모르겠습니다.이 줄 뒤에 루프를 사용하여 모든 레코드를 List에 추가해야합니다. 1000+ 레코드의 루프를 사용하지 않고 성능에 이중성을 적용하고 싶습니다. –

+1

puhhh. 좋은 질문. 나는 그렇게 생각하지 않는다. ... –

+0

왜 당신은 downvote @ StefanBe를 가지고 있냐. – KDeogharkar

0

:

Cursor cursor = database.query(SQLiteHelper.TABLE_YOURTABLE, 
    allColumns, null, null, null, null, null); 

가 나는 결과를 반복 할 수있는 명확한 방법을 생각한다 loadi를 피하는 유일한 방법 수천 개의 레코드가 적게로드됩니다. (화면에 수천 개의 항목을 넣을 수는 없습니다.)

목록에 어떤 형태로든 lazy loading을 구현하고 싶을 것입니다.

+0

좋은 생각인데 어떻게 데이터를 단계별로로드하기 위해 listview 또는 다른 뭔가에서 페이징을 제공 할 수 있습니까? –