Android SQL INSERT语句使用变量问题

时间:2011-07-27 12:03:38

标签: android sql insert

我遇到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,而Filename和Hash都是字符串,我已经确认通过在Toast中显示正确的数据来存储它们。

上面引发了一个错误但如果我将最后一行更改为以下内容,即硬编码要插入的数据就可以了。

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

我怎样才能使这个工作?

非常感谢

马特

3 个答案:

答案 0 :(得分:4)

我还没有真正使用Android,但那些文件不是文件变量吗?

不应该是

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

答案 1 :(得分:3)

您需要关闭字符串引号并在Insert语句中添加变量。像这样的东西;

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

假设您在其他地方定义了三个变量(dialogID,filename和newHash)。

答案 2 :(得分: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);