47

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

私のどこが間違っているか教えてください。感謝。

4

7 に答える 7

91

試す:

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

AND for List<String>

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

    list.add(name);
    cursor.moveToNext();
  }
}
于 2012-04-11T17:45:36.783 に答える
4

これは他のソリューションとほぼ同じソリューションですが、同じ結果を達成するさまざまな方法を見て、少し説明するとよいと思いました。

おそらく、DBHandler を呼び出した時点でテーブル名 String 変数が初期化されているため、次のようになります。

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();

正直、やり方はいろいろありますが、

于 2016-11-22T00:36:36.427 に答える
1

私は同じ問題を調べてきました!あなたの問題は、返す ArrayList を設定するために使用する変数を特定する場所に関連していると思います。ループ内で定義すると、データベース内のテーブルの最後の行が常に参照されます。これを回避するには、ループの外でそれを特定する必要があります。

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

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

            list.add(name);
            cursor.moveToNext();
        }
}
于 2015-02-04T19:54:35.970 に答える
1
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();
于 2018-02-06T19:15:00.980 に答える