2010-03-23 47 views
57

Tôi có truy vấn chọn các hàng trong một ListView mà không bị giới hạn. Nhưng bây giờ tôi đã thực hiện một SharedPreferences mà người dùng có thể chọn số lượng hàng sẽ được hiển thị trong ListView, truy vấn SQLite của tôi không hoạt động. Tôi đang đi qua các lập luận theo cách này:Sử dụng câu lệnh LIMIT trong truy vấn SQLite

return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, "LIMIT='" + limite + "'"); 

Trả lời

109

Các equals (=) điều hành không được sử dụng với mệnh đề LIMIT. Gỡ bỏ nó.

Dưới đây là một truy vấn Ví dụ LIMIT:

SELECT column FROM table ORDER BY somethingelse LIMIT 5, 10 

Hoặc:

SELECT column FROM table ORDER BY somethingelse LIMIT 10 

Trong trường hợp của bạn, báo cáo kết quả đúng sẽ là:

return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, String.valueOf(limite)); 

Hãy xem ở đây tại SQLite chọn cú pháp: http://www.sqlite.org/syntaxdiagrams.html#select-stmt

Hình ảnh này là khá hữu ích: http://www.sqlite.org/images/syntax/select-stmt.gif

+0

thế nào về '" 5 , 10 "' khoản? hoặc 'LIMIT 3 OFFSET 2' –

3

Đối với bất cứ ai tình cờ gặp phải câu trả lời này đang tìm kiếm một cách để sử dụng một điều khoản LIMIT với một OFFSET, tôi phát hiện ra từ this bug rằng Android sử dụng regex sau đây để phân tích các điều khoản giới hạn của một truy vấn:

Từ <framework/base/core/java/android/database/sqlite/SQLiteQueryBuilder.java>

LIMIT khoản được kiểm tra với sau sLimitPattern.

private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); 

Lưu ý rằng regex không chấp nhận định dạng offsetNumber,limitNumber mặc dù nó không chấp nhận tuyên bố OFFSET trực tiếp.

-1

Do lỗi này mà cũng không cho phép giới hạn tiêu cực

8, -1

tôi đã phải sử dụng workaround này

SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
builder.setTables(table); 
String query = builder.buildQuery(projection, selection, null, null, null, sortOrder, null); 
query+=" LIMIT 8,-1"; 
Các vấn đề liên quan