execSQL ステートメントで整数値と文字列値を設定しようとしています:
mydb.execSQL("UPDATE emptable set age=? where name=?",new int[] {emp_age},new String[] {emp_name});
ここで、emp_age は整数で、emp_name は文字列です。しかし、これは機能していません。どうすればこれを達成できますか?
申し訳ありませんが、与えられた回答に満足できません。その理由を説明します。
@hotveryspicy の回答は見苦しいだけでなく、危険でもあります。SQL インジェクションの可能性を思い出してください。これにより、保存されているデータが失われる可能性があります。同じことが@john smithの回答にも当てはまります。
@ user1318091の回答は、これらの回答(指定されたサンプルコードを含む)をすべて間違っているのと同じ理由で正しくありません。ドキュメントを読むと、次のように書かれていることに気付くでしょう。
SELECT/INSERT/ UPDATE /DELETEではない単一の SQL ステートメントを実行します。
最初の行に。上記の操作の代替手段もリストされています。
UPDATE ステートメントの場合は、代わりに次のいずれかを使用します。
- update(文字列、ContentValues、文字列、文字列[])
- updateWithOnConflict(String, ContentValues, String, String[], int)
update()
単純な-methodを使用することを選択した場合、クエリは次のようになります (テストされていません!):
ContentValues values = new ContentValues();
values.put("age", age); // your integer...
mydb.update("emptable", values, "name=?", new String[]{emp_name});
また、正しい「where」構文については、この質問を確認してください: ContentValues と update-method を使用して SQL データベースを更新します
SDKは言う
bindArgs: bindArgs では、byte[]、String、Long、Double のみがサポートされています
しかし、bindArgs を使用したい場合は、これを試すことができます
mydb.execSQL("UPDATE emptable set age=? where name=?",new String[] {String.valueOf(emp_age)},new String[] {emp_name});
String sql = "UPDATE emptable SET age = "+age + " WHERE name = '" + emp_name + "';";
db.execSQL(sql);