2012-07-09 26 views
13

Có ai hiểu cách sử dụng SQLiteDatabase.CursorFactory trên Android không? Tôi đang tìm kiếm để có được một đối tượng SQLiteCursor liên tục trong đó sử dụng một câu lệnh SQL SELECT trong đó một số biểu thức mệnh đề WHERE của nó sử dụng các tham số có thể được thay đổi theo lập trình trước khi requerying.Cách sử dụng SQLiteDatabase.CursorFactory

Ví dụ:

SELECT LocationID FROM Locations WHERE Latitude < northlimit AND Latitude > southlimit AND Longitude < eastlimit AND Longitude > westlimit; 

Giới hạn thông số sẽ thay đổi năng động, một lần mỗi 200ms

Tôi cố gắng để giải quyết một vấn đề đó nếu tôi chỉ sử dụng SQLiteDatabase.rawQuery("SELECT ..."); hệ thống tạo ra một CursorWindow mới cho mỗi truy vấn mới , cuối cùng hết bộ nhớ. Vì vậy, tôi đang cố gắng tìm một cách để buộc hệ thống không tạo ra CursorWindows mới.

+0

Trước khi truy vấn lại, bạn nên đóng con trỏ cũ. Bằng cách đó bạn không nên hết bộ nhớ. Theo như tôi biết SQLite không hỗ trợ truy cập hàng ngẫu nhiên trên các tập kết quả truy vấn của nó. Bạn chỉ có thể lặp lại kết quả SQLite từ đầu đến cuối. Khung công tác Android hoạt động xung quanh vấn đề đó bằng cách tải toàn bộ kết quả vào một con trỏ để cho phép truy cập ngẫu nhiên. Nếu truy vấn của bạn trả về nhiều hàng (hoặc nhiều dữ liệu), bạn cũng có thể gặp phải tình trạng thiếu bộ nhớ. – tiguchi

Trả lời

0
myCursor.close(); 
myDataBaseHelp.close(); 

Và hãy nhớ, sau khi trích xuất dữ liệu, hãy đóng dữ liệu!

1

Bạn có thể kiểm tra hướng dẫn này .. tổng của nó lên một cách hoàn hảo:

http://www.youtube.com/watch?v=j-IV87qQ00M

và bạn nên đóng DB, sau khi bất kỳ việc sử dụng .. cách khác là tạo ra lớp biến Cursor cr và mỗi khi bạn sử dụng nó, hãy kiểm tra điều này: nếu (cr == null) cr = new .... else // làm điều gì đó //

cr.close();