微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android:rawQuery

如何解决Android:rawQuery

无法检测到应用程序崩溃的原因。变量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);

从Google Play控制台中崩溃的输出,有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 docssqlite文档

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

文档显示可以使用

解决方法

尝试更改

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,...)
2. time(timestring,...)
3. datetime(timestring,...)
4. julianday(timestring,...)
5. strftime(format,timestring,...)

要获得毫秒级精度,可以使用以下转换:

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)

找到了here

然后您可以使用>=BETWEEN .. AND ..进行整数比较

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。