0

无法检测应用程序崩溃的原因。变量StartDatelastTimeCalculateValues很长。

Cursor c = MyApplicationExtendsClass.database.rawQuery("SELECT * FROM " + MyApplicationExtendsClass.locationTableName + " WHERE [Date] >= '" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US).format(StartDate) + "' AND [Date] <= '" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US).format(lastTimeCalculateValues) + "' ORDER BY Id ASC", null);

来自谷歌游戏控制台的崩溃输出,5% 的活跃用户,这就是我得到的全部。

android.database.sqlite.SQLiteException: 
  at android.database.sqlite.SQLiteConnection.nativePrepareStatement (Native Method)
  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:948)
  at android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:559)
  at android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:603)
  at android.database.sqlite.SQLiteProgram.<init> (SQLiteProgram.java:63)
  at android.database.sqlite.SQLiteQuery.<init> (SQLiteQuery.java:37)
  at android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:46)
  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1493)
  at android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1427)
  at my.packagename.MainActivity.calculateValuesFinalFromDb (MainActivity.java:4013)
  at my.packagename.MainActivity.access$1800 (MainActivity.java:152)
  at my.packagename.MainActivity$CalculateValuesTimer.run (MainActivity.java:4112)
  at java.util.TimerThread.mainLoop (Timer.java:562)
  at java.util.TimerThread.run (Timer.java:512)

日期时间的SQLite 文档 SQLite 文档

A time string can be in any of the following formats:  
  
YYYY-MM-DD  
YYYY-MM-DD HH:MM  
YYYY-MM-DD HH:MM:SS  
YYYY-MM-DD HH:MM:SS.SSS  
YYYY-MM-DDTHH:MM  
YYYY-MM-DDTHH:MM:SS  
YYYY-MM-DDTHH:MM:SS.SSS  
HH:MM  
HH:MM:SS  
HH:MM:SS.SSS  
now  
DDDDDDDDDD

文档说yyyy-MM-dd HH:mm:ss.SSS可以使用

4

1 回答 1

0

尝试改变

SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US)

SimpleDateFormat("yyyy-MM-dd", Locale.US)

这是日期的默认 SQL 格式。

并在这里查看我的答案:Can't get data from date to date SQLite


更新:

链接的第一部分:

SQLite supports five date and time functions as follows:

1. date(timestring, modifier, modifier, ...)
2. time(timestring, modifier, modifier, ...)
3. datetime(timestring, modifier, modifier, ...)
4. julianday(timestring, modifier, modifier, ...)
5. strftime(format, timestring, modifier, modifier, ...)

要获得以毫秒为单位的精度,您可以使用以下转换:

CAST((julianday('your_date') - 2440587.5)*86400000 As INTEGER)

解释:

  1. julianday('your_date')返回自公元前 4714 年 11 月 24 日格林威治中午以来的天数
  2. julianday('your_date') - 2440587.5返回纪元时间的天数 (1970)
  3. *86400000将其转换为毫秒 (24* 60* 60* 1000)

在这里找到。

然后你可以用>=或也用BETWEEN .. AND ..

于 2020-11-07T10:08:00.590 回答