2012-04-11 5 views
34

SQLite 데이터베이스에서 모든 행을 가져 오려고했습니다. 하지만 다음 코드에서 마지막 행만 얻었습니다.SQLite에서 모든 행 가져 오기

FileChooser 클래스 :

public ArrayList<String> readFileFromSQLite() { 

    fileName = new ArrayList<String>(); 

    fileSQLiteAdapter = new FileSQLiteAdapter(FileChooser.this); 
    fileSQLiteAdapter.openToRead(); 
    cursor = fileSQLiteAdapter.queueAll(); 

    if (cursor != null) { 
    if (cursor.moveToFirst()) { 
     do { 
     fileName.add(cursor.getString(cursor.getColumnIndex(FileSQLiteAdapter.KEY_CONTENT1))); 
     } while (cursor.moveToNext()); 

    } 
    cursor.close(); 
    } 

    fileSQLiteAdapter.close(); 
    return fileName; 
} 

FileSQLiteAdapter 클래스 : 내 잘못이다

public Cursor queueAll() { 
    String[] columns = new String[] { KEY_ID, KEY_CONTENT1 }; 

    Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, null, 
       null, null, null, null); 
    return cursor; 
} 

말해주십시오. 고맙다.

+0

cursor.getCount의 값이() 무엇 예? – Anirudh

+0

@Anirudh 이해가 안됩니다.나를 설명해 주시겠습니까? – Yoo

+0

이 문장을 코드에 넣을 수 있습니까? Log.d ("TAG", "Retrieved rows -"+ cursor.getCount()); 어떤 가치가 있다고 보십니까? 커서가 검색 한 행 수입니다. queueAll() 메소드에서 커서를 리턴하기 전에 수행하십시오. – Anirudh

답변

69

시도 :

Cursor cursor = db.rawQuery("select * from table",null); 

List<String>에 대한 :

if (cursor.moveToFirst()) { 
    while (!cursor.isAfterLast()) { 
    String name = cursor.getString(cursor.getColumnIndex(countyname)); 

    list.add(name); 
    cursor.moveToNext(); 
    } 
} 
+0

결과 동일하다, 마지막 행만 얻는다. – Yoo

+0

print'cursor.getCount();'결과는 어떨까요? –

+0

방금 ​​시도했습니다. cursor.getCount()의 결과는 1입니다. 데이터를 삽입하는 중에 문제가 발생했을 수 있습니다. – Yoo

2

저도 같은 문제로 찾고있다! 귀하의 문제는 귀하가 반환하는 ArrayList를 채우는 데 사용하는 변수를 식별하는 위치와 관련이 있다고 생각합니다. 루프 내에서 정의하면 데이터베이스의 테이블에있는 마지막 행을 항상 참조합니다. 이를 방지하기 위해, 당신은 루프 외부에서 식별 할 수있다 : 이것은 다른 사람과 거의 동일한 솔루션이

String name; 
if (cursor.moveToFirst()) { 

     while (cursor.isAfterLast() == false) { 
      name = cursor.getString(cursor 
        .getColumnIndex(countyname)); 

      list.add(name); 
      cursor.moveToNext(); 
     } 
} 
+5

이것은 어떻게 당신의 대답을 다른 것 또는 더 도움이되게 하는가? – Shubham

2

이지만, 나는 같은 결과를 달성하는 다른 방법을보고하는 것이 좋을 것 생각 조금 설명해주세요 :

아마도 DBHandler를 호출 할 때 초기화 된 테이블 이름 문자열 변수가 있습니다.

private static final String MYDATABASE_TABLE = "anyTableName"; 

그런 다음 모든 테이블 행을 검색하려고 할 때마다; 이 일에 대해 많은 방법이 솔직히

SQLiteDatabase db = this.getReadableDatabase(); 
Cursor cursor = db.rawQuery("select * from " + MYDATABASE_TABLE, null); 

List<String> fileName = new ArrayList<>(); 
if (cursor.moveToFirst()){ 
    fileName.add(cursor.getString(cursor.getColumnIndex(COLUMN_NAME))); 
    while(cursor.moveToNext()){ 
     fileName.add(cursor.getString(cursor.getColumnIndex(COLUMN_NAME))); 
    } 
} 
cursor.close(); 
db.close(); 

, 아래

0

업데이트 queueAll() 방법 : 아래

업데이트 readFileFromSQLite() 방법 :

public ArrayList<String> readFileFromSQLite() { 

    fileName = new ArrayList<String>(); 

    fileSQLiteAdapter = new FileSQLiteAdapter(FileChooser.this); 
    fileSQLiteAdapter.openToRead(); 

    cursor = fileSQLiteAdapter.queueAll(); 

    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      do 
      { 
       String name = cursor.getString(cursor.getColumnIndex(FileSQLiteAdapter.KEY_CONTENT1)); 
       fileName.add(name); 
      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 
    } 

    fileSQLiteAdapter.close(); 

    return fileName; 
} 
2

다른 답변은 rawQuery입니다. SQLiteDatabase에 대한 documentationnull을 쿼리의 selection 매개 변수에 전달하여 모든 행을 가져올 수 있다고 말합니다.

selection null을 전달하면 주어진 테이블의 모든 행이 반환됩니다.

SQLiteDatabase db = mHelper.getReadableDatabase(); 
String[] columns = { 
     MyDatabaseHelper.COLUMN_1, 
     MyDatabaseHelper.COLUMN_2, 
     MyDatabaseHelper.COLUMN_3}; 
String selection = null; // this will select all rows 
Cursor cursor = db.query(MyDatabaseHelper.MY_TABLE, columns, selection, 
     null, null, null, null, null); 
0
Cursor cursor = myDb.viewData(); 

     if (cursor.moveToFirst()){ 
       do { 
       String itemname=cursor.getString(cursor.getColumnIndex(myDb.col_2)); 
       String price=cursor.getString(cursor.getColumnIndex(myDb.col_3)); 
       String quantity=cursor.getString(cursor.getColumnIndex(myDb.col_4)); 
       String table_no=cursor.getString(cursor.getColumnIndex(myDb.col_5)); 

       }while (cursor.moveToNext()); 

       } 

       cursor.requery();