Android Sugar ORM select 来自数据库的子列表
Android Sugar ORM select sublist from database
我正在使用 Sugar ORM,它实际上是一个用于 SQL 数据库操作的库。我的数据库有超过 4000 条记录,我想从中检索 500 条记录,比如第 501 到第 1000 条记录。
提取500条记录如下:
db_record_listing = Records.findWithQuery(Records.class, "Select * FROM Records ORDER BY recordId ASC WHERE qref_canton BETWEEN '" + s_start + "' AND '" + s_end + "'");
但是报错logcat如下:
Logcat:
11-25 23:29:35.639: E/AndroidRuntime(28801): Caused by: android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: Select * FROM Records ORDER BY recordId ASC WHERE qref_canton BETWEEN '1' AND '500'
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
问题:
- 上面的问题是什么?我发现如果我删除 ORDER BY 代码可以 运行 正确(尽管它很慢)。
- 系统还会运行遍历所有记录,只挑
recordId
在范围内的记录,因此很慢吗?如果是,是否有更快的方法让系统只检索这 500 条记录而不是更多?
Select * FROM Records WHERE qref_canton BETWEEN '1' AND '500' ORDER BY recordId ASC
String from = "0";
String to = "500";
final List<PropertyTable> propertyTables = PropertyTable.findWithQuery(PropertyTable.class,
"Select * FROM PROPERTY_TABLE WHERE mortgageprice BETWEEN ? AND ?",from,to);
我正在使用 Sugar ORM,它实际上是一个用于 SQL 数据库操作的库。我的数据库有超过 4000 条记录,我想从中检索 500 条记录,比如第 501 到第 1000 条记录。
提取500条记录如下:
db_record_listing = Records.findWithQuery(Records.class, "Select * FROM Records ORDER BY recordId ASC WHERE qref_canton BETWEEN '" + s_start + "' AND '" + s_end + "'");
但是报错logcat如下:
Logcat:
11-25 23:29:35.639: E/AndroidRuntime(28801): Caused by: android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: Select * FROM Records ORDER BY recordId ASC WHERE qref_canton BETWEEN '1' AND '500'
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
11-25 23:29:35.639: E/AndroidRuntime(28801): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
问题:
- 上面的问题是什么?我发现如果我删除 ORDER BY 代码可以 运行 正确(尽管它很慢)。
- 系统还会运行遍历所有记录,只挑
recordId
在范围内的记录,因此很慢吗?如果是,是否有更快的方法让系统只检索这 500 条记录而不是更多?
Select * FROM Records WHERE qref_canton BETWEEN '1' AND '500' ORDER BY recordId ASC
String from = "0";
String to = "500";
final List<PropertyTable> propertyTables = PropertyTable.findWithQuery(PropertyTable.class,
"Select * FROM PROPERTY_TABLE WHERE mortgageprice BETWEEN ? AND ?",from,to);