Java 在ContentResolver中滥用聚合函数MAX()

Java 在ContentResolver中滥用聚合函数MAX(),java,android,sqlite,Java,Android,Sqlite,我正在尝试使用SQLite的MAX()函数通过自定义ContentProvider的查询方法获取列的最大值,但是当我运行应用程序时,它崩溃了,给出了当前错误: 06-20 17:30:33.868 30109-30109/?E/AndroidRuntime:致命异常:主 流程:com.bpl.spart.bloodpressurelogbook,PID:30109 android.database.sqlite.SQLiteException:编译时滥用聚合函数MAX()(代码1)::从tabl

我正在尝试使用SQLite的MAX()函数通过自定义ContentProvider的查询方法获取列的最大值,但是当我运行应用程序时,它崩溃了,给出了当前错误:

06-20 17:30:33.868 30109-30109/?E/AndroidRuntime:致命异常:主 流程:com.bpl.spart.bloodpressurelogbook,PID:30109 android.database.sqlite.SQLiteException:编译时滥用聚合函数MAX()(代码1)::从tablatomasdepression中选择_id、sistolica、disatolica、pulso,其中MAX(sistolica) 位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法) 位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) 位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498) 位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:37) 位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) 位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163) 位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034) 位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202) 位于db.TomasProvider.query(TomasProvider.java:48) 位于android.content.ContentProvider.query(ContentProvider.java:1017) 位于android.content.ContentProvider$Transport.query(ContentProvider.java:238) 位于android.content.ContentResolver.query(ContentResolver.java:491) 位于android.content.ContentResolver.query(ContentResolver.java:434) 在com.bpl.spart.bloodpressurelogbook.pestanaGraficos$1.0上选择(pestanaGraficos.java:95) 在android.widget.AdapterView.fireOnSelected上(AdapterView.java:931) 在android.widget.AdapterView.dispatchOnItemSelected中(AdapterView.java:920) 位于android.widget.AdapterView.-wrap1(AdapterView.java) 在android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:890)上 位于android.os.Handler.handleCallback(Handler.java:746) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5459) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

这是我调用方法的代码:

                   final String[] projection = {Contrato.Columnas._ID,Contrato.Columnas.SISTOLICA,Contrato.Columnas.DIASTOLICA,Contrato.Columnas.PULSO};
                    final String select  = "MAX(" + Contrato.Columnas.SISTOLICA + ")";

                    Cursor c = resolver.query(Contrato.URI_CONTENIDO_BASE,projection,select,null,null);

                    if(c.moveToNext()){
                        String sisq = c.getString(c.getColumnIndex(Contrato.Columnas.SISTOLICA));
                        sistolicaMAQ.setText(sisq);

                        String diaq = c.getString(c.getColumnIndex(Contrato.Columnas.DIASTOLICA));
                        diastolicaMAQ.setText(diaq);

                        String pulq = c.getString(c.getColumnIndex(Contrato.Columnas.PULSO));
                        pulsoMAQ.setText(pulq);
                    }

因此,问题是如何更正此错误?

使用
=ALL
和一个子选择来限制结果,或者使用
ORDER BY
sistolica
对行进行排序,并仅获取第一行。就性能而言,该查询所需的时间最长()或者由sistolica ASC在有大量寄存器的数据库中订购?我不知道。两种都可以。