2011-07-27 11 views
0

SQL INSERTステートメントに問題があります。私はStringsに格納されたデータを挿入しようとしていますが、これは常にエラーをスローします。 変数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であり、ファイル名とハッシュは、私は、正しいデータがトーストにそれらを表示することにより、これらの中に格納されていることを確認している、両方の文字列です。

上記のエラーはスローされますが、私はこれを最後の行に変更した場合、つまり挿入するデータをハードコーディングしても機能します。

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

どうすればこの機能を利用できますか?

多くのおかげ

マット

+1

をエラーは何ですか? – Sumit

答えて

3

私は本当にアンドロイドで働いていないが、これらのファイルは、ファイル変数ではありませんか?

は、それはあなたは、文字列の引用符を閉じて、あなたの挿入ステートメントにあなたの変数を追加する必要が

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

クエリのファイル名とnewHashの引用符がありません – Jacob

+0

確かに編集しました – Killerwes

+0

これはうまくいきました。 – Matt

3

すべきではありません。このようなもの;

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

3つの変数(dialogID、filenameおよび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);