Android SQLite从下到上查询行,时间戳等于当前日期

时间:2014-07-03 08:25:28

标签: java android sqlite

我正在为我的应用程序使用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()方法已被弃用...我应该用什么方法替换它以产生相同的效果(将行的时间戳表示的日期与传递日期的日期进行比较一个论点)。

1 个答案:

答案 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的当前时间,以便你可以比较它。然后,您将检索表的所有字段(仅在您需要时),然后您将仅检索与“订购依据”基础中的“选择”部分和订单匹配的行。

希望它有所帮助!