2012-04-11 39 views
34

Tôi đã cố gắng lấy tất cả các hàng từ cơ sở dữ liệu SQLite. Nhưng tôi chỉ nhận được hàng cuối cùng từ các mã sau.Nhận tất cả các hàng từ SQLite

lớp 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 lớp:

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

Hãy cho tôi biết nơi là không chính xác của tôi. Đánh giá.

+0

giá trị của cursor.getCount() là gì? – Anirudh

+0

@Anirudh Tôi không hiểu.Bạn có thể giải thích cho tôi không? – Yoo

+0

Bạn có thể đặt câu lệnh này trong mã của bạn không - Log.d ("TAG", "Hàng đã truy xuất -" + cursor.getCount()); và cho tôi biết bạn thấy giá trị nào? Đó là số hàng mà con trỏ đã truy xuất. Thực hiện trước khi trả về con trỏ trong phương thức queueAll(). – Anirudh

Trả lời

69

thử:

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

VÀ cho List<String>:

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

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

Kết quả là như nhau, nó chỉ nhận được hàng cuối cùng. – Yoo

+0

in 'cursor.getCount();' kết quả là gì? –

+0

Tôi vừa thử. Kết quả của cursor.getCount() là 1. Có thể sự cố đã xảy ra trong khi chèn dữ liệu. – Yoo

2

Tôi đã được nhìn vào cùng một vấn đề! Tôi nghĩ rằng vấn đề của bạn liên quan đến nơi bạn xác định biến mà bạn sử dụng để điền vào ArrayList mà bạn quay trở lại. Nếu bạn định nghĩa nó bên trong vòng lặp, thì nó sẽ luôn luôn tham khảo hàng cuối cùng trong bảng trong cơ sở dữ liệu. Để tránh điều này, bạn phải xác định nó ở bên ngoài vòng lặp:

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

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

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

Làm thế nào để câu trả lời của bạn khác biệt hoặc hữu ích hơn? – Shubham

2

này là gần như là giải pháp tương tự như những người khác, nhưng tôi nghĩ rằng nó có thể là tốt để xem xét những cách khác nhau để đạt được kết quả tương tự và giải thích một chút:

Có thể bạn có tên bảng Biến chuỗi được khởi tạo tại thời điểm bạn gọi là DBHandler vì vậy nó sẽ giống như;

private static final String MYDATABASE_TABLE = "anyTableName"; 

Sau đó, bất cứ nơi nào bạn đang cố gắng truy xuất tất cả các hàng trong bảng;

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

Thành thực mà nói, có rất nhiều cách về việc này,

0

Cập nhật queueAll() phương pháp như sau:

Cập nhật readFileFromSQLite() phương pháp như sau:

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

Các câu trả lời khác sử dụng rawQuery. documentation cho SQLiteDatabase cho biết rằng bạn chỉ có thể vượt qua trong null tham số selection của truy vấn để nhận tất cả các hàng.

selection Truyền null sẽ trả về tất cả các hàng cho bảng đã cho.

Ví dụ

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(); 
Các vấn đề liên quan