我正在開發一款正在開發Android移動應用程序的Capstone項目。 該應用程序顯示了一個調查問題,用戶讓其他人來回答問題。答案存儲在SQLite數據庫表中。我成功地創建了數據庫,從單選按鈕獲取輸入,並永久地將答案存儲在表中。 表中的每一列代表一個問題的答案。SQLite Android Count Query不起作用
現在我需要執行一個COUNT
查詢來計算每個列中具有特定條件的答案數。
實施例:
SELECT COUNT(KEY_GENDER)
FROM TABLE_ANSWERS
WHERE KEY_GENDER = "Female";
在上述查詢,KEY_GENDER
是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();
}
這裏是另一個片斷,其中查詢是爲了顯示這兩個「男性」和「女性」的數量使用組由:
// 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方法結果Activity類應該使用計方法查詢表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));
}
的目錄下載:
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
的問題是:每當我按下按鈕定位到驗證結果的活動,以顯示查詢結果,應用程序停止並顯示此消息:「不幸的是,應用程序有停止「,顯然不顯示任何計數查詢結果。
當我從驗證結果活動中取出數據庫代碼時,該活動當然適用於空白頁面,因爲它不包含任何代碼。所以,我認爲主要問題只來自於計數查詢。
我從名爲Android Database Programming的教科書中獲得了這些查詢的結構。 我也嘗試改變結構和其他東西,使其工作。 我一直在尋找網絡和教科書來解決問題,並讓計數查詢工作。
那麼,我的計數查詢有什麼問題?我怎樣才能使它工作並顯示結果? 我很感激你的幫助,因爲我必須儘快提交這個項目。
預先感謝您。
更新:我有一個SQLite關鍵字間隔的語法問題。我通過向關鍵字添加空格在上面的代碼中修復了它。
間距是你的問題,你只需要一個空間。它應該是「FROM Answers」或「SELECT COUNT」。它不能讀取「FROMAnswers」或「SELECTCount」 – Jawascript 2014-10-31 16:24:07
問題是偏離主題的:「這個問題是由於不能再現的問題或簡單的印刷錯誤引起的。」儘管類似的問題可能是關於主題的,一個以不太可能幫助未來讀者的方式解決。 ' – Selvin 2014-10-31 16:26:39
sheesh。閱讀錯誤信息? – 2014-10-31 16:40:31