2016-08-18 9 views
1

パラメータ値の内部に整数をバインドするSQL文を書きたいと思っています。列COLUMN_PRIORITYの値は10です。どのようにクエリ内に配置するのですか?整数を内部に持つアンドロイドのsqlite文の値

SQLiteStatement sqLiteStatement = db.compileStatement("" + "INSERT OR REPLACE INTO " + TABLE_NAME + " (" + 
       COLUMN_ID + ", " + 
       COLUMN_TITLE + ", " + 
       COLUMN_PRIORITY + ", " + 
       COLUMN_CREATED_AT + ", " + 
       COLUMN_UPDATED_AT + ") " + 
       "Values (?,?," + 
        10 + ", " + 
       createdAt + ", " + updatedAt") ") ; 

     sqLiteStatement.bindString(1, contextId); 
     sqLiteStatement.bindString(2, bubbleDetails.getId()); 
     sqLiteStatement.execute(); 

このステートメントは無効です。

+0

エラーは何ですか? –

+1

メソッドcompileStatementを呼び出す前に、渡される文字列を出力します。何か目立つかもしれません。 –

+0

私は文字列を印刷し、それは私のためによく見えます。問題は、 "値(?、?、" + 10 + "、" + createdAt + "、" + updatedAt ")"内部では、varaiblesと整数値を取得することは期待できません。疑問符。 – user2924714

答えて

0

ContentValuesオブジェクトを受け入れるdb.insertメソッドを使用するようにしてください。

ContentValues values = new ContentValues(); 
values.put(COLUMN_PRIORITY, 10); 
//... Other columns 
db.insert(TABLE_NAME, null, values); 
+0

ありがとうございます。これは私が使用した回避策です。私はちょうどコンテンツ値なしでそれを行う方法があるのだろうかと思う。 – user2924714

+1

"回避策"ではありません。 IMOでは、SQLインジェクションを防ぐために推奨されるアプローチです。とにかく 'int'valueを受け入れる' bindString'メソッドがないので、 'bindString(x、String.valueOf(id))'を使う必要があると思います。 –

関連する問題