2014-02-23 114 views
1

我想從我的SQLite數據庫在Android中使用此查詢來獲取數據。SQLIte查詢返回空的光標

Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = 1 ", null); 

但是,遊標返回空白,存在值爲1的taskId。

如果我這樣做

Cursor cursor = db.rawQuery("SELECT * FROM Task", null); 

我的遊標包含的所有值 - 包括價值1的taskid

我已經嘗試了所有下面的命令,以及,他們都沒有工作:

Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = " + 1, null); 
Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = " + "'1'", null); 
Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = ?", new String[]{"1"}); 

taskId是Integer類型,嘗試使用Text,也沒有工作。

有沒有我沒有考慮過的東西?幫助將不勝感激!

編輯: 代碼創建數據庫:如果您創建例如,具有4場數據庫和使用,如果你添加你需要重新對手機數據庫中的新領域該DB然後

CREATE TABLE Task + " (" + 
     _id INTEGER PRIMARY KEY," + 
     "taskDescription TEXT, +     
     "taskId INTEGER," + 
     "taskName TEXT" + 
     "PreviousTaskID " + "REFERENCES " + "PreviousTasks " + 
     "(" + PreviousTasks._ID + "))" 
+0

如何顯示一些代碼? –

+0

你可以顯示你的表格的定義嗎? – Merlevede

+0

PFF,仍然沒有錯......你確定你沒有將_id字段與taskId混合? – Merlevede

回答

6
Cursor cursor = null; 
String Query ="SELECT * FROM Task where taskId = 1 "; 
cursor = sqldb.rawQuery(Query, null); 

if (cursor != null && cursor.moveToFirst()) { 
    do { 
    // ... 
    } while (cursor.moveToNext()); 

    cursor.close(); 
} 

我希望它的對你有用..

1

,刪除並創建它。

你的數據庫必須在/data/data/com.yourapp.package/databases/,使用thisthis打開它並檢查是否有錯誤。

刪除所有空格:

Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM Task WHERE taskId=1", null); 

步驟光標到第一個結果:

cursor.moveToFirst(); 

使用getInt

int taskid = c.getnt(c.getColumnIndex("taskId")); 
+0

你試過那些東西嗎?它是否工作? – Smile2Life

1

我只是發現了問題所在:當訪問遊標,我用下面的代碼:

cursor.moveToFirst(); 
while(cursor.moveToNext()){ 
    //stuff 
}; 

相反,我不得不這樣做是這樣的:

cursor.moveToFirst(); 
do{ 
    //stuff 
} while(cursor.moveToNext()); 

我沒有注意到的錯誤,當我詢問

Cursor.rawQuery("SELECT * FROM TASK"); 

,因爲我的光標有一個以上的進入和。但是當我查詢時

Cursor.rawQuery("SELECT * FROM TASK WHERE taskID=1"); 

遊標只有一個條目因爲while循環而被跳過。

+1

僅供參考,如果沒有數據,這會失敗。你應該檢查'moveToFirst()'的返回值,太。 – laalto

0

如果你的意思是-1告訴「空」,所以你只要之前使用moveToFirst()cusor元素的數量。

Cusror c = rawQuery(...); 
// this line is required 
c.moveToFirst(); 

然後如果你想嘗試調用

c.getCount() 

返回!= 0(如果該查詢返回大於0)。