回答編集履歴

5

修正

2024/05/03 08:39

投稿

kotori_a
kotori_a

スコア829

test CHANGED
@@ -16,4 +16,4 @@
16
16
 
17
17
  でもこれは、SQLインジェクションを引き起こすおそれのある典型的なダメコードです。
18
18
 
19
- このようなことをさせないために、queryForMap(String sql, @Nullable Object... args)メソッドは、バインド変数を使えるようにしてるんです。
19
+ このようなことをさせないために、queryForMap(String sql, @Nullable Object... args)メソッドは、バインド変数を使えるようにしてるんです。(参考:[データベースのバインド変数のメリットを語る(②メリット:SQLインジェクションの防止)](https://qiita.com/zd6ir7/items/14cad311e017ade98f6c))

4

修正

2024/05/03 08:37

投稿

kotori_a
kotori_a

スコア829

test CHANGED
@@ -1,8 +1,9 @@
1
1
  > 検索したいレコードのidさえわかればデータベースから検索できるのになぜqueryという引数が必要なのでしょうか?
2
2
  あらゆるデータベースに「id」という名前で主キーが存在するわけではないからです。
3
3
  そのコードサンプルの前提としているサンプルデータベースの抽出条件とするカラムがたまたま「id」という名前だから「id」という名前でコード上、アクセスしているだけで、データベースによっては別名の場合もあるでしょう。
4
+ また抽出したいレコードについて、すべてのカラムではなく必要なカラムだけ限定して抽出したい場合もあるでしょう。
4
5
 
5
- だからこそ、query と言う引数で、そのデータベースに応じた SQL 文を指定できるようにしているわけです。
6
+ だからこそ、query と言う引数で、対象となるデータベース及び目的とするデータに応じた SQL 文を指定できるようにしているわけです。
6
7
 
7
8
  > queryが分かればidの引数など不要に思います。
8
9
  これについて「id引数は不要だ。id を変数化して使用したいなら query として直接組み立てる下記のようなコードでいいじゃないか?」と考えていらっしゃるのかもしれません。

3

修正

2024/05/03 08:35

投稿

kotori_a
kotori_a

スコア829

test CHANGED
@@ -15,4 +15,4 @@
15
15
 
16
16
  でもこれは、SQLインジェクションを引き起こすおそれのある典型的なダメコードです。
17
17
 
18
- このようなことをさせないために、queryForMap(StringSE sql, @Nullable ObjectSE... args)メソッドは、バインド変数を使えるようにしてるんです。
18
+ このようなことをさせないために、queryForMap(String sql, @Nullable Object... args)メソッドは、バインド変数を使えるようにしてるんです。

2

修正

2024/05/03 08:33

投稿

kotori_a
kotori_a

スコア829

test CHANGED
@@ -5,8 +5,7 @@
5
5
  だからこそ、query と言う引数で、そのデータベースに応じた SQL 文を指定できるようにしているわけです。
6
6
 
7
7
  > queryが分かればidの引数など不要に思います。
8
- queryを 固定してしまうと id を変えられません。
9
- 「id引数は不要だ。id を変数化して使用したいなら query として直接組み立てる下記のようなコードでいいじゃないか?」と考えていらっしゃるかもしれません。
8
+ これについて「id引数は不要だ。id を変数化して使用したいなら query として直接組み立てる下記のようなコードでいいじゃないか?」と考えていらっしゃるかもしれません。
10
9
  ```
11
10
  String query="select"
12
11
  +"from employee"

1

修正

2024/05/03 08:32

投稿

kotori_a
kotori_a

スコア829

test CHANGED
@@ -10,8 +10,7 @@
10
10
  ```
11
11
  String query="select"
12
12
  +"from employee"
13
- +"where id="
13
+ +"where id=" +id;
14
- +id;
15
14
  Map<String, Object> employee=jdcbTemplate.queryForMap(query);
16
15
  ```
17
16