2011-07-27 27 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);