SQLite Android Count Query不起作用

 超级a9厑厑 发布于 2022-12-13 20:56

我正在开发我的capstone项目,该项目正在开发Android移动应用程序.该应用程序显示调查问题,用户让其他人回答它.答案存储在SQLite数据库表中.我成功地创建了数据库,从单选按钮获取输入,并持久地将答案存储到表中.表中的每一列代表一个问题的答案.

现在,我需要执行一个COUNT查询来计算每列中具有特定条件的答案数.

例:

SELECT COUNT(KEY_GENDER)
FROM TABLE_ANSWERS
WHERE KEY_GENDER = "Female";

在上面的查询中,KEY_GENDER是性别列,存储的数据是女性还是男性. TABLE_ANSWERS是表名.

此查询的功能是显示许多女性已经回答了调查.

以下是计数查询代码段,它位于数据库类中:

   // count of gender.
    public int countGender(){

        String colName = "COUNT(" + KEY_GENDER +")" ;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT" + colName + "FROM" + TABLE_ANSWERS + "WHERE" + KEY_GENDER + "=?" + new String[] {"Female"}, null) ;


        while (cursor.moveToNext()) {
            int  colID = cursor.getColumnIndex(KEY_GENDER);
            int colID2 = cursor.getColumnIndex(colName);

        }
        db.close();
        cursor.close();

        // return count
        return cursor.getCount();

    }

这是另一个片段,其中查询应该使用group by显示"男性"和"女性"的数量:

 // count of gender.
    public int countGender(){

        String colName = " COUNT(" + KEY_GENDER +") " ;
        SQLiteDatabase db = this.getReadableDatabase();
       // Cursor cursor = db.rawQuery("SELECT " + colName + "FROM " + TABLE_ANSWERS + " WHERE " + KEY_GENDER + "=?" + new String[] {" Female"}, null) ;
        Cursor cursor = db.rawQuery("SELECT " + KEY_GENDER + colName + "FROM " + TABLE_ANSWERS + " GROUP BY " + KEY_GENDER, null) ;


        while (cursor.moveToNext()) {
            int  colID = cursor.getColumnIndex(KEY_GENDER);
            int colID2 = cursor.getColumnIndex(colName);

        }
        db.close();
        cursor.close();

        // return count
        return cursor.getCount();

    }

以下代码段是验证结果活动类中的onCreate方法,该方法应使用count方法查询表TABLE_ANSWERS:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_validation_results);

   DatabaseHandler db = new DatabaseHandler(ValidationResults.this);
   TextView gender;
   gender = (TextView) findViewById(R.id.textViewGender);

    int genderResult;
    genderResult = db.countGender();

    gender.setText(String.valueOf(genderResult));

}

catlog:

10-31 15:31:19.666    2221-2221/arwa.conceptsurvey D/dalvikvm? GC_FOR_ALLOC freed 68K, 5% free 3410K/3556K, paused 13ms, total 16ms
10-31 15:31:19.754    2221-2221/arwa.conceptsurvey D/dalvikvm? GC_FOR_ALLOC freed 3K, 4% free 3628K/3780K, paused 83ms, total 83ms
10-31 15:31:19.770    2221-2221/arwa.conceptsurvey I/dalvikvm-heap? Grow heap (frag case) to 6.030MB for 2536932-byte allocation
10-31 15:31:19.826    2221-2230/arwa.conceptsurvey D/dalvikvm? GC_FOR_ALLOC freed <1K, 3% free 6106K/6260K, paused 54ms, total 54ms
10-31 15:31:20.686    2221-2221/arwa.conceptsurvey D/libEGL? loaded /system/lib/egl/libEGL_genymotion.so
10-31 15:31:20.690    2221-2221/arwa.conceptsurvey D/? HostConnection::get() New Host Connection established 0xb93f2f40, tid 2221
10-31 15:31:20.774    2221-2221/arwa.conceptsurvey D/libEGL? loaded /system/lib/egl/libGLESv1_CM_genymotion.so
10-31 15:31:20.774    2221-2221/arwa.conceptsurvey D/libEGL? loaded /system/lib/egl/libGLESv2_genymotion.so
10-31 15:31:21.022    2221-2221/arwa.conceptsurvey W/EGL_genymotion? eglSurfaceAttrib not implemented
10-31 15:31:21.022    2221-2221/arwa.conceptsurvey E/OpenGLRenderer? Getting MAX_TEXTURE_SIZE from GradienCache
10-31 15:31:21.038    2221-2221/arwa.conceptsurvey E/OpenGLRenderer? MAX_TEXTURE_SIZE: 16384
10-31 15:31:21.062    2221-2221/arwa.conceptsurvey E/OpenGLRenderer? Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
10-31 15:31:21.066    2221-2221/arwa.conceptsurvey E/OpenGLRenderer? MAX_TEXTURE_SIZE: 16384
10-31 15:31:21.066    2221-2221/arwa.conceptsurvey D/OpenGLRenderer? Enabling debug mode 0
10-31 15:31:21.086    2221-2221/arwa.conceptsurvey I/Choreographer? Skipped 36 frames!  The application may be doing too much work on its main thread.
10-31 15:32:41.710    2221-2221/arwa.conceptsurvey D/dalvikvm? GC_FOR_ALLOC freed 109K, 3% free 6992K/7172K, paused 10ms, total 11ms
10-31 15:32:41.738    2221-2221/arwa.conceptsurvey E/SQLiteLog? (1) near "SELECTCOUNT": syntax error
10-31 15:32:41.738    2221-2221/arwa.conceptsurvey D/AndroidRuntime? Shutting down VM
10-31 15:32:41.738    2221-2221/arwa.conceptsurvey W/dalvikvm? threadid=1: thread exiting with uncaught exception (group=0xa4cfab20)
10-31 15:32:41.750    2221-2221/arwa.conceptsurvey E/AndroidRuntime? FATAL EXCEPTION: main
    Process: arwa.conceptsurvey, PID: 2221
    java.lang.RuntimeException: Unable to start activity ComponentInfo{arwa.conceptsurvey/arwa.conceptsurvey.ValidationResults}: android.database.sqlite.SQLiteException: near "SELECTCOUNT": syntax error (code 1): , while compiling: SELECTCOUNT(gender)FROMAnswers
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.database.sqlite.SQLiteException: near "SELECTCOUNT": syntax error (code 1): , while compiling: SELECTCOUNT(gender)FROMAnswers
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37)
            at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
            at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
            at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
            at arwa.conceptsurvey.DatabaseHandler.countGender(DatabaseHandler.java:211)
            at arwa.conceptsurvey.ValidationResults.onCreate(ValidationResults.java:27)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
10-31 15:32:44.474    2221-2221/arwa.conceptsurvey I/Process? Sending signal. PID: 2221 SIG: 9

问题是:每当我按下导航到验证结果活动的按钮以显示查询结果时,应用程序就会停止并显示以下消息:"不幸的是,应用程序已停止"并且显然没有显示任何计数查询结果.

当我从验证结果活动中取出数据库代码时,该活动当然适用于空白页面,因为它不包含任何代码.所以,我认为主要问题只来自count查询.

我从一本名为Android Database Programming的教科书中得到了这些查询的结构.我也尝试改变结构和其他东西以使其工作.我一直在搜索网络和教科书来解决问题,并使计数查询工作.

那么,我的计数查询有什么问题?我怎样才能使它工作并显示结果?我非常感谢你的帮助,因为我必须尽快提交这个项目.

先感谢您.

更新:我有一个SQLite关键字间隔的语法问题.我通过在关键字中添加空格来修复上面的代码.

1 个回答
  • 正如您在日志中看到的那样

    "SELECTCOUNT": syntax error (code 1):
    

    在你的SELECT单词之后添加空格:

    db.rawQuery("SELECT "
    

    同样适用于FROM和其他保留字WHERE, GROUP

    2022-12-13 21:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有