我遇到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是一个int,而Filename和Hash都是字符串,我已经确认通过在Toast中显示正确的数据来存储它们。
上面引发了一个错误但如果我将最后一行更改为以下内容,即硬编码要插入的数据就可以了。
hashDB.execSQL("INSERT INTO " + HASH_TABLE2 +" (dialogID, Filename, Hash) "
+ " Values (4, 'filename', 'newHash');");
我怎样才能使这个工作?
非常感谢
马特
答案 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);