2011-08-21 26 views
18

Sau khi tạo một con trỏ SQLite tiêu chuẩn, tôi lặp lại qua các mục sử dụng:sqlite: trông giống như moveToNext hoạt động mà không cần moveToFirst

while (cursor.moveToNext()) { 
} 

Tất cả các hàng đang được xử lý một cách chính xác. Tất cả tài liệu tôi đã đọc nói rằng bạn cần phát hành moveToFirst() để đảm bảo mà bạn đang trỏ đến mục nhập đầu tiên của bộ con trỏ.

Tính năng này có hoạt động ngay cả khi không được, và bản phát hành khác có thể không có cùng xử lý?

Trả lời

42

Không, tính năng này hoạt động chính xác. Cursor s bắt đầu tại chỉ mục hàng -1 (trước hàng đầu tiên). Nếu tham chiếu Cursor nhiều hàng, lặp lại chúng bằng vòng lặp while như bạn đã đề xuất là phương pháp được ưu tiên. Nó sẽ gọi moveToNext(), sẽ chuyển bạn đến chỉ mục 0 (hàng đầu tiên) và đi từ đó.

Nếu Cursor chỉ tham chiếu một hàng, bạn có thể gọi moveToFirst() trên đó trước khi đọc dữ liệu để đảm bảo rằng bạn đang ở trên một chỉ mục hợp lệ. Cả hai moveToFirst()moveToNext() đều có tác dụng tương tự khi Cursor được tạo đầu tiên và có chỉ số -1.

+0

Cảm ơn! Điều đó giải thích lý do tại sao nó được làm việc nhất quán. Kỳ lạ là không có ví dụ nào tôi đã thấy chỉ ra rằng đây là cách bạn có thể lặp lại thông qua một con trỏ. – charlest

+4

+1, Phân tích rất tuyệt vời. Đây cũng là [tài liệu ở đây] (http://developer.android.com/reference/android/database/Cursor.html#getPosition()). – orip

+0

"di chuyển bạn đến chỉ mục 0 (hàng đầu tiên)" Chính xác nó di chuyển đến chỉ mục 1 từ chỉ mục -1 bỏ qua 0. – vitalii

Các vấn đề liên quan