2013-07-13 40 views
0

在我的應用程序,我創建一個表我的數據庫是這樣的:在找不到一個SQLiteDatabase記錄

String action; 

    action= "CREATE TABLE "; 
    action+=TABLE_LIEUX; 
    action+="(Name TEXT NOT NULL PRIMARY KEY);"; 
    base.execSQL(action); 

我再添加一條記錄到該表:

ContentValues valeur; 
    long InsertLine=-10; 

    valeur=new ContentValues(1); 
    valeur.put("Name","'"+name+"'"); 
    InsertLine=getWritableDatabase().insert(TABLE_LIEUX,null,valeur); 

按照預期,我得到的InsertLine的值爲1。但是,當我嘗試搜索該行加入:

  result=(SQLiteCursor)getWritableDatabase().query(TABLE_LIEUX,null,"Name='"+name+"'",null,null,null,null); 

SQLiteCursor結果我得到具有-1的長度。當我嘗試再次添加該行時,我得到一個SQLiteException,它指示該行應該是唯一的(因此,儘管搜索的結果是該行已經在數據庫中)。

有什麼想法?

+0

您沒有名稱列。 –

+1

在創建表中您使用「Nom」在您的查詢中使用「名稱」... – Frank

+0

@Frank得到了問題。 – LuckyMe

回答

1

您必須強制Cursor讀取返回的數據(通過調用moveToFirst或類似的東西),然後才能獲得遊標的記錄數。

此外,使用ContentValuesput函數時不得引用值;數據庫中的值現在包含多餘的引號。

+0

隨着'moveToFirst'語句的添加,'Cursor'計數爲0,而不是像以前那樣爲-1。但它不是1,因爲它應該是... – Zelig63

0

爲什麼你將查詢結果轉換爲(SQLiteCursor)? 查詢語句總是返回一個Cursor對象,因此會對演員造成困擾。

Cursor result = getWritableDatabase(). 
query(TABLE_LIEUX, null, "Name='"+name+ 
"'", null, null, null, null); 

String mString; 

if(result != null && c.moveToFirst()) { 
    mString = result.getString(result. 
getColumnIndex("Name")); 
} 

希望這會有所幫助。

+0

使用'光標'而不是'SQLiteCursor'不會改變任何東西... – Zelig63

+0

@ Zelig63問題在於您的內容值聲明。你應該寫 valeur.put(「Name」,name); 不需要單引號。 單引號只在查詢語句中需要。 –

相關問題