在我的Android应用程序中,用户可以使用导入的数据填充数据库,然后执行预定义的复杂SQL查询。对于某些数据模式,查询将花费很长时间(HTC Hero上的分钟和更多时间),而常见用法不会超过10-15秒。
有没有办法在Android上取消挂起的SQLite查询?超时也一样好,不需要部分结果。我正在AsyncTask.doInBackground()
我知道最好的方法是优化查询或更改应用程序逻辑,但在这种情况下结果取决于用户的知识,所以我想帮助那些输入麻烦模式的人。
答案 0 :(得分:2)
您无法取消待处理的SQL查询。它是在SQLite引擎中完成的。 SQLite具有中断查询的本机方法,但在java接口中无法访问。
最好的方法是提高查询性能 阅读:http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuning
您可以通过限制行号将长时间运行的查询划分为更小的查询。然后取消以块为单位执行的查询会更容易。
答案 1 :(得分:0)
ASyncTask支持取消,标志应取消全部,包括SQL查询。
ASyncTask.cancel(boolean mayInterruptIfRunning)
答案 2 :(得分:0)
SQLite提供了一个intrerupt方法: http://www.sqlite.org/c3ref/interrupt.html
我不确定你会怎么称呼它在Android中。
答案 3 :(得分:0)
您可以使用android.os.CancellationSignal
取消在 sqlite 上运行的查询,android.database.sqlite.SQLiteDatabase
可以传递给df = pd.DataFrame([1,2,3,4],index=['A']*4)
df
Out[325]:
0
A 1
A 2
A 3
A 4