SQLite Android计数查询不起作用
我正在做我的顶点项目,开发一个Android移动应用程序。 该应用程序显示一个调查问题,用户让其他人回答。答案存储在SQLite数据库表中。我成功地创建了数据库,从单选按钮获取输入,并将答案持久地存储到表中。 表中的每一列代表一个问题的答案 现在我需要执行一个计数查询来计算每列中有多少个答案符合特定条件 例如:SQLite Android计数查询不起作用,android,database,sqlite,Android,Database,Sqlite,我正在做我的顶点项目,开发一个Android移动应用程序。 该应用程序显示一个调查问题,用户让其他人回答。答案存储在SQLite数据库表中。我成功地创建了数据库,从单选按钮获取输入,并将答案持久地存储到表中。 表中的每一列代表一个问题的答案 现在我需要执行一个计数查询来计算每列中有多少个答案符合特定条件 例如: SELECT COUNT(KEY_GENDER) FROM TABLE_ANSWERS WHERE KEY_GENDER = "Female"; 在上面的查询中,KEY_GENDER是
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();
}
以下代码段是Validation Results活动类中的onCreate方法,该方法应使用count方法查询表\u答案:
@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.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(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
问题是:每当我按下导航到Validation Results(验证结果)活动以显示查询结果的按钮时,应用程序就会停止并显示以下消息:不幸的是,应用程序已经停止,并且显然没有显示任何计数查询结果
当我从Validation Results活动中删除数据库代码时,该活动当然可以在空白页上正常工作,因为它不包含任何代码。所以,我认为主要的问题仅仅来自计数查询
我从一本叫做Android数据库编程的教科书中得到了这些查询的结构。
我还试图改变结构和其他一些事情来让它工作。
我一直在搜索网页和教科书来解决这个问题,并让计数查询正常工作
那么,我的计数查询有什么问题?我如何使其工作并显示结果?
我真的很感激你的帮助,因为我必须尽快提交这个项目
先谢谢你
更新:我在SQLite关键字的间距上遇到了语法问题。我在上面的代码中通过在关键字中添加空格来解决这个问题。正如您在日志中看到的那样
"SELECTCOUNT": syntax error (code 1):
在选择单词后添加空格:
FROM和其他保留字也是一样,如WHERE、GROUP等空格是你的问题,你只需要一个空格。它应该来自答案,或者选择计数。无法阅读答案或SelectCount问题脱离主题:此问题是由无法再复制的问题**或简单的印刷错误造成的。**虽然此处可能有类似的主题问题,但此问题的解决方式不太可能对未来的读者有所帮助。嘘。阅读错误消息?你的空格键坏了吗@我确实添加了间距,但仍然不起作用。谢谢。他是对的,你需要确保你在添加空格manually@PedroOliveira是的,SQL关键字没有空格。现在我修复了它并添加了间距,但查询仍然不起作用。根本问题是什么?谢谢。更新您的问题。如果问题与SQL无关,请将此标记为答案,然后开始一篇新文章。@PedroOliveira我更新了它。我正在编写代码,以确定这是否是SQLite问题。如果不是,我会把这个标记为答案。关于,仍然缺少空格…olName+FROM+TA在保留关键字之前添加空格
db.rawQuery("SELECT "