从SQLite获取所有行

时间:2012-04-11 17:43:04

标签: android 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;
}

请告诉我,我的错误在哪里。升值。

7 个答案:

答案 0 :(得分:75)

尝试:

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

AND List<String>

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

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

答案 1 :(得分:3)

这几乎与其他解决方案相同,但我认为看看实现相同结果的不同方法并解释一下可能会很好:

你可能在调用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();

老实说,有很多方法可以做到这一点,

答案 2 :(得分:3)

使用Android的内置方法

如果您想要每一列和每一行,只需传入let postsForUser: [[String: Any]] = posts.filter { guard let post = $0 as? [String : Any] else { return false } return post["username"] as? String == selectedUserName } print("postForUser = \(postsForUser)") vc.posts = postsForUser //vc.posts should be [[String: Any]] nullcolumn参数{/ 1}}。

selection

更多详情

其他答案使用Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null, null); ,但您可以使用内置SQLiteDatabase的Android。 rawQuery的{​​{3}}表示您可以将query传递给null参数以获取所有行。

  

selection传递null将返回给定表的所有行。

虽然您也可以通过selection传递null参数来获取所有列(如上面的单行中所示),但最好只返回您需要的列。 SQLiteDatabase

  

column传递null将返回所有列,不鼓励这些列阻止从不会被使用的存储中读取数据。

示例

columns

答案 3 :(得分:2)

我一直在研究同样的问题!我认为您的问题与您识别用于填充返回的ArrayList的变量的位置有关。如果在循环内定义它,那么它将始终引用数据库中表的最后一行。为了避免这种情况,你必须在循环之外识别它:

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

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

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

答案 4 :(得分:0)

更新queueAll()方法,如下所示:

public Cursor queueAll() {

     String selectQuery = "SELECT * FROM " + MYDATABASE_TABLE;
     Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null);

     return cursor;
}

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

答案 5 :(得分: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();

答案 6 :(得分:0)

public List<String> getAllData(String email)
{

    db = this.getReadableDatabase();
    String[] projection={email};

    List<String> list=new ArrayList<>();

    Cursor cursor = db.query(TABLE_USER, //Table to query
            null,    //columns to return
            "user_email=?",        //columns for the WHERE clause
            projection,        //The values for the WHERE clause
            null,       //group the rows
            null,       //filter by row groups
            null);
    //  cursor.moveToFirst();

    if (cursor.moveToFirst()) {
        do {

            list.add(cursor.getString(cursor.getColumnIndex("user_id")));
            list.add(cursor.getString(cursor.getColumnIndex("user_name")));
            list.add(cursor.getString(cursor.getColumnIndex("user_email")));
            list.add(cursor.getString(cursor.getColumnIndex("user_password")));
            // cursor.moveToNext();

        } while (cursor.moveToNext());
    }
    return list;
}