2011-07-27 28 views
0

我有一個SQL INSERT語句有問題。我試圖插入存儲在字符串中的數據,但是這總是會引發錯誤。使用變量的Android SQL INSERT語句問題

private final String HASH_DB = "hashDb"; 
private final String HASH_TABLE2 = "newHashes"; 

SQLiteDatabase hashDB = null; 

hashDB = this.openOrCreateDatabase(HASH_DB, MODE_PRIVATE, null); 

hashDB.execSQL("CREATE TABLE IF NOT EXISTS " + HASH_TABLE2 
    + " (dialogID INT, Filename VARCHAR, Hash VARCHAR);"); 

hashDB.execSQL("INSERT INTO " + HASH_TABLE2 +" (dialogID, Filename, Hash) " 
    + " Values (dialogID, filename, newHash);"); 

dialogID是一個i​​nt,和文件名,哈希都是字符串,我已確認正確的數據是通過在吐司顯示它們存儲在這些。

上面會拋出一個錯誤,但如果我將最後一行更改爲下面的內容,即硬編碼要插入的數據,它將起作用。

hashDB.execSQL("INSERT INTO " + HASH_TABLE2 +" (dialogID, Filename, Hash) " 
    + " Values (4, 'filename', 'newHash');"); 

我該如何得到這個工作?

非常感謝

馬特

+1

有什麼錯誤? – Sumit

回答

3

我還沒有真正與Android合作,但這些文件而不是文件變量?

它不應該是

hashDB.execSQL("INSERT INTO " + HASH_TABLE2 +" (dialogID, Filename, Hash) " 
    + " Values (" + dialogID + ", '" + filename + "', '" + newHash + "');"); 
+0

您正在查詢的文件名和newHash附近缺少引號 – Jacob

+0

事實上,我編輯了它 – Killerwes

+0

這工作,謝謝。 – Matt

3

您需要關閉該字符串引號和INSERT語句中添加變量。像這樣的東西;

hashDB.execSQL("INSERT INTO " + HASH_TABLE2 +" (dialogID, Filename, Hash) " 
    + " Values (" + dialogID + ", '" + filename + "', '" + newHash + "');"); 

假設你已經在其他地方所定義的三個變量(dialogID,文件名和newHash)。

2

您將錯誤的參數傳遞給查詢。

您應該通過以下方式做到這一點:

" Values(" + dialogId +", " +filename +", " + newHash +");" 

,或者你應該使用

public long insert (String table, String nullColumnHack, ContentValues values) 

例子:

ContentValues values = new ContentValues(); 
values.put("dialogId", dialogId); 
values.put("filename", filename); 
values.put("newHash", newHash); 
mDatabase.insert("your_table", null, values);