在我的 SQLiteAdapter
类中,对于 Android 应用程序,我有以下方法。键KEY_WAS
可以是 0 或 1。该方法在数据库中搜索给定name
和给定date
(对于给定日期,数据库中的特定名称只能有一个唯一条目)。因此,如果存在这样的条目,我们进入内部if
,否则was
保持为零。最后,was
被退回。
public int wasHere(String name, String date) throws SQLException {
Log.d("wasHere", "begins, date = " + date);
Cursor c = ourDatabase.query(DATABASE_TABLE, ALL_KEYS, KEY_NAME
+ "=" + "'" + name + "'" + " AND " + KEY_DATE + "=" + "'"
+ date + "'", null, null, null, null);
Log.d("wasHere", "below Cursor");
int was = 0;
if(c.moveToFirst()) {
Log.d("wasHere", "inside IF");
was = c.getInt(c.getColumnIndex(KEY_WAS));
}
Lod.d("wasHere", "ends");
return was;
}
从日志条目中,我粘贴了一些特定的条目(您可以忽略“开始”和“结束”之间的时间,因为这取决于正在调用的循环wasHere
):
07-18 07:08:03.398: D/dbwas(29568): begins, date = 08 Aug 2013
07-18 07:08:03.398: D/dbwas(29568): below cursor
07-18 07:08:03.398: D/dbwas(29568): ends
07-18 07:08:03.398: D/dbwas(29568): begins, date = 09 Aug 2013
07-18 07:08:03.406: D/dbwas(29568): below cursor
07-18 07:08:03.406: D/dbwas(29568): ends
07-18 07:08:03.359: D/dbwas(29568): begins, date = 02 Aug 2013
07-18 07:08:03.359: D/dbwas(29568): below cursor
07-18 07:08:03.367: D/dbwas(29568): inside IF
07-18 07:08:03.367: D/dbwas(29568): ends
07-18 07:08:03.367: D/dbwas(29568): begins, date = 03 Aug 2013
07-18 07:08:03.367: D/dbwas(29568): below cursor
07-18 07:08:03.375: D/dbwas(29568): inside IF
07-18 07:08:03.375: D/dbwas(29568): ends
07-18 07:08:03.430: D/dbwas(29568): begins, date = 14 Aug 2013
07-18 07:08:03.430: D/dbwas(29568): below cursor
07-18 07:08:03.430: D/dbwas(29568): inside IF
07-18 07:08:03.430: D/dbwas(29568): ends
我的问题是关于“开始”和“结束”的日志时间。正如您在上面看到的,在五个日志条目中,有两个(8 月 8 日和 8 月 14 日)从“开始,日期 = ...”到“结束”花费了 0 时间。
8 月 9 日执行Cursor
语句需要 8 毫秒(0.008 秒)。
8 月 2 日和3 月 3 日执行if
语句需要 8 毫秒(0.008 秒)。
8 月 14 日不需要时间执行上述两个语句中的任何一个。
同样,“日志”中也有很多这样的差异。对于不同的日期,Cursor
andif
语句随机占用 8 毫秒(是的,时间总是 8 毫秒)。
现在,我正在执行“wasHere”方法数百次,所以数百 8 毫秒花费了我太多时间。为什么上述差异是随机发生的。有什么方法可以删除它(或者可能是我正在做的另一种方式)。[8 月 8 日和 8 月 14 日的声明应采用零时间。]