回答編集履歴

9

追記

2018/01/21 09:26

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
10
10
 
11
- サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStridの型によりますが、`SQL Injection`が実行可能なコードになります。
11
+ サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStr,d,idの型によりますが、`SQL Injection`が実行可能なコードになります。
12
12
 
13
13
 
14
14
 

8

totalに加算するということはdは数値型相当なため問題ないので、訂正

2018/01/21 09:26

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
10
10
 
11
- サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とdの型によりますが、`SQL Injection`が実行可能なコードになります。
11
+ サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStrとidの型によりますが、`SQL Injection`が実行可能なコードになります。
12
12
 
13
13
 
14
14
 

7

検証ではなくサニタイジング(無害化)なため言葉を訂正

2018/01/21 09:20

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
10
10
 
11
- `SQL Injection`の検証ていない限り、dの型によりますが、`SQLInjection`が可能なコードになります。
11
+ サニタイジング(無害化)行っていない限り、画面のレイアウト定義とdの型によりますが、`SQL Injection`が実行可能なコードになります。
12
12
 
13
13
 
14
14
 
@@ -44,7 +44,7 @@
44
44
 
45
45
  case 0:
46
46
 
47
- // 対象データなし
47
+ // 更新対象データなし
48
48
 
49
49
  Log.e("sql", stmt.toString());
50
50
 
@@ -61,6 +61,8 @@
61
61
  default:
62
62
 
63
63
  // 複数件(データ不整合)
64
+
65
+ // 本当に起こり得ないなら、特別なエラー処理を行った方がいいです。
64
66
 
65
67
  Log.e("sql", stmt.toString());
66
68
 

6

ローカル環境で適当なテーブルを作って動作確認したので訂正

2018/01/21 09:15

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します。
20
20
 
21
- 動作確認してませんが、こんな感じに。あとは頑張ってくださいな。
21
+ こんな感じになります
22
22
 
23
23
 
24
24
 

5

stmt.closeを2回実行しているので、訂正!

2018/01/20 22:35

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -66,12 +66,6 @@
66
66
 
67
67
  break;
68
68
 
69
- }
70
-
71
- }finally {
72
-
73
- stmt.close();
74
-
75
69
  }
76
70
 
77
71
  }finally {
@@ -84,4 +78,8 @@
84
78
 
85
79
  ■参考情報
86
80
 
87
- [SQLiteStatement](https://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html)
81
+ - [SQLiteStatement](https://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html)
82
+
83
+ - [SQLiteProgram](https://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html)
84
+
85
+ - [ContentValues](https://developer.android.com/reference/android/content/ContentValues.html)

4

インデントとuuidをbindStringに変更

2018/01/20 21:45

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -36,37 +36,43 @@
36
36
 
37
37
  stmt.bindLong(2, d);
38
38
 
39
- stmt.bindLong(3, id);
39
+ stmt.bindString(3, id);
40
40
 
41
41
  row_count = stmt.executeUpdateDelete();
42
42
 
43
- switch(row_count) {
43
+ switch(row_count) {
44
44
 
45
- case 0:
45
+ case 0:
46
46
 
47
- // 対象データなし
47
+ // 対象データなし
48
48
 
49
- Log.e("sql", stmt.toString());
49
+ Log.e("sql", stmt.toString());
50
50
 
51
- break;
51
+ break;
52
52
 
53
- case 1:
53
+ case 1:
54
54
 
55
- // 正常時:更新件数が1件の時
55
+ // 正常時:更新件数が1件の時
56
56
 
57
- Log.d("sql", String.valueOf(row_count));
57
+ Log.d("sql", String.valueOf(row_count));
58
58
 
59
- break;
59
+ break;
60
60
 
61
- default:
61
+ default:
62
62
 
63
- // 複数件(データ不整合)
63
+ // 複数件(データ不整合)
64
64
 
65
- Log.e("sql", stmt.toString());
65
+ Log.e("sql", stmt.toString());
66
66
 
67
- break;
67
+ break;
68
68
 
69
69
  }
70
+
71
+ }finally {
72
+
73
+ stmt.close();
74
+
75
+ }
70
76
 
71
77
  }finally {
72
78
 

3

if文からswitchに変更!

2018/01/20 20:43

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -40,11 +40,33 @@
40
40
 
41
41
  row_count = stmt.executeUpdateDelete();
42
42
 
43
- if (row_count == 0) {
43
+ switch(row_count) {
44
44
 
45
- Log.e("sql", stmt.toString());
45
+ case 0:
46
46
 
47
+ // 対象データなし
48
+
49
+ Log.e("sql", stmt.toString());
50
+
51
+ break;
52
+
53
+ case 1:
54
+
55
+ // 正常時:更新件数が1件の時
56
+
57
+ Log.d("sql", String.valueOf(row_count));
58
+
59
+ break;
60
+
61
+ default:
62
+
63
+ // 複数件(データ不整合)
64
+
65
+ Log.e("sql", stmt.toString());
66
+
67
+ break;
68
+
47
- }
69
+ }
48
70
 
49
71
  }finally {
50
72
 

2

追記

2018/01/20 20:34

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -4,11 +4,11 @@
4
4
 
5
5
 
6
6
 
7
- [EditText](https://developer.android.com/reference/android/widget/EditText.html)は画面の項目ですよね。
7
+ [EditText](https://developer.android.com/reference/android/widget/EditText.html)は画面の項目ですよね。画面の入力項目の値をSQLにそのまま渡していると仮定して回答しますが、
8
8
 
9
9
  質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
10
10
 
11
- `SQL Injection`の検証をしていない限り、dの型と値によりますが、`SQLInjection`が可能なコードになります。
11
+ `SQL Injection`の検証をしていない限り、dの型によりますが、`SQLInjection`が可能なコードになります。
12
12
 
13
13
 
14
14
 
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- 質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します
19
+ 質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します。
20
20
 
21
21
  動作確認してませんが、こんな感じに。あとは頑張ってくださいな。
22
22
 

1

追記

2018/01/20 19:00

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -4,9 +4,11 @@
4
4
 
5
5
 
6
6
 
7
+ [EditText](https://developer.android.com/reference/android/widget/EditText.html)は画面の項目ですよね。
8
+
7
9
  質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
8
10
 
9
- `SQL Injection`の検証をしていない限り、`SQLInjection`が可能なコードになります。
11
+ `SQL Injection`の検証をしていない限り、dの型と値によりますが、`SQLInjection`が可能なコードになります。
10
12
 
11
13
 
12
14