データベースのtotalにEditTextから取得したdという変数の値を加算したいのですがデータベースの引数をどうやって加算するかわかりません。
どのように書けばよいか教えてください。
db.execSQL("update MEMO_TABLE set body = '" + bodyStr + "', total='"+d+"total"+"' where uuid = '" + id + "'");
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
質問の回答は他の回答者様で既に出ていますが、SQL Injection
について
db.execSQL("update MEMO_TABLE set body = '" + bodyStr + "', total='"+d+"total"+"' where uuid = '" + id + "'");
EditTextは画面の項目ですよね。画面の入力項目の値をSQLにそのまま渡していると仮定して回答しますが、
質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStr,d,idの型によりますが、SQL Injection
が実行可能なコードになります。
SQL Injection防止のため、文字列(String)でSQLを結合することは避けて、バインドパラメータ
を使用してくださいな。
質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します。
こんな感じになります。
Java
1final String sql = "UPDATE MEMO_TABLE SET body=?,total=total+? WHERE uuid=?"; 2SQLiteStatement stmt = db.compileStatement(sql); // APIレベル19以上からtry~with~Resources文が使えるはずです! 3int row_count = 0; 4try { 5 stmt.bindString(1, bodyStr); 6 stmt.bindLong(2, d); 7 stmt.bindString(3, id); 8 row_count = stmt.executeUpdateDelete(); 9 switch(row_count) { 10 case 0: 11 // 更新対象データなし 12 Log.e("sql", stmt.toString()); 13 break; 14 case 1: 15 // 正常時:更新件数が1件の時 16 Log.d("sql", String.valueOf(row_count)); 17 break; 18 default: 19 // 複数件(データ不整合) 20 // 本当に起こり得ないなら、特別なエラー処理を行った方がいいです。 21 Log.e("sql", stmt.toString()); 22 break; 23 } 24}finally { 25 stmt.close(); 26}
■参考情報
投稿2018/01/20 18:55
編集2018/01/21 09:26総合スコア5846
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。