2012-04-11 10 views
34

私はSQLiteデータベースからすべての行を取得しようとしています。しかし、私は次のコードから最後の行だけを得ました。SQLiteからすべての行を取得

チューザクラス:

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です。 SQLiteDatabasedocumentationは、すべての行を取得するためにクエリのselectionパラメータにnullを渡すことができます。

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(); 
関連する問題