2

execSQL ステートメントで整数値と文字列値を設定しようとしています:

mydb.execSQL("UPDATE emptable set age=? where name=?",new int[] {emp_age},new String[] {emp_name});

ここで、emp_age は整数で、emp_name は文字列です。しかし、これは機能していません。どうすればこれを達成できますか?

4

3 に答える 3

11

申し訳ありませんが、与えられた回答に満足できません。その理由を説明します。

@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 データベースを更新します

于 2012-04-07T10:44:20.700 に答える
1

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});
于 2012-04-07T10:06:57.483 に答える
-1
 String sql = "UPDATE emptable  SET age = "+age + " WHERE name = '" + emp_name + "';";
 db.execSQL(sql);
于 2012-04-07T09:45:26.817 に答える