我正在为我的应用程序使用SQLite,而且我有一个大型数据库。该数据库有3列:
id(int auto incerement)| timestamp(int)| value(string)
我想拥有最新记录,其中包含当天的时间戳(毫秒)。
在我有一个代码来查询表中的所有记录,但它非常慢:
public List<PhysicalActivity> getAllPhysicalActivities(){
List<PhysicalActivity> all = new ArrayList<PhysicalActivity>();
Cursor cursor = mDatabase.query(PhysicalActivityDatabaseHelper.TABLE_NAME, mColumns
, null, null, null, null, null);
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
PhysicalActivity pa = cursorToPhysicalActivity(cursor);
all.add(pa);
cursor.moveToNext();
}
cursor.close();
return all;
}
我想像在MySQL中那样做ORDER BY id DESC
...我需要像这样的代码:
public List<PhysicalActivity> getPhysicalActivitiesForDate(Date date){
List<PhysicalActivity> activities = new ArrayList<PhysicalActivity>();
Cursor cursor = mDatabase.query(PhysicalActivityDatabaseHelper.TABLE_NAME, mColumns
, null, null, null, null, "ORDERBY " + PhysicalActivityDatabaseHelper.COLUMN_ID +
" DESC");
cursor.moveToFirst();
while(!cursor.isAfterLast()){
PhysicalActivity pa = cursorToPhysicalActivity(cursor);
Date d = new Date(pa.getTimestamp());
if(d.getDay() == date.getDay()){
activities.add(pa);
}
cursor.moveToNext();
}
cursor.close();
return activities;
}
另一个问题是getDay()
方法已被弃用...我应该用什么方法替换它以产生相同的效果(将行的时间戳表示的日期与传递日期的日期进行比较一个论点)。
答案 0 :(得分:1)
此查询应解决您的问题。我会解释一下。
long curretTime = System.currentTimeMillis()
Cursor cursor = mDatabase.query(
PhysicalActivityDatabaseHelper.TABLE_NAME, //Table name
mColumns, //Queryed columns
PhysicalActivityDatabaseHelper.TIMESTAMP + " = " currentTime, //Select
null, null, null,
PhysicalActivityDatabaseHelper.TIMESTAMP + " DESC" //Order By
);
首先,你将获得milis的当前时间,以便你可以比较它。然后,您将检索表的所有字段(仅在您需要时),然后您将仅检索与“订购依据”基础中的“选择”部分和订单匹配的行。
希望它有所帮助!