---
# System prepended metadata

title: JDBC

---


# JDBC

##### 眞鍋)　助かります・・。綺麗なフォーマットありがとうございます。
## 入力型プログラム(テキストP9, 10)　14:00開始
#### ●scannerをimportし、変数へ格納
#### ●次のコードを追加
String sql = "SELECT * FROM [テーブル名] WHERE [カラム名(物理名)] = '"+ line + "'";
※シングルP9クォート(')とダブルクオーテーション(")に注意
⇒+ line + を"で囲み、さらにその外側を'で囲む
※テキストは"の数が間違っているため注意
【例】
String sql = "SELECT * FROM user_table WHERE user_name = '" + line + "'";

<br>
### 「接続時情報のような固定情報を定数化」と「接続と切断を行う処理をメソッド化」については説明のみ
<br>

## SQLインジェクション対策　(p14, 15) 14:30開始
この対策をしないと、名前を入力してください画面で「‘OR’t’ = ‘t」と入力すると、名前が表示されてしまう。

#### ●「‘OR’t’ = ‘t」と入力されても検索結果を表示できないようにする
①この２つを追加
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, line);

⇒こちらは削除
Statement stmt = con.createStatement();

②()内のsqlを削除
ResultSet rs = stmt.executeQuery();

## JavaでINSERTを使ってみる　(p17, 18) 15:00
以下のコードを実行しても何も出力されないが、データベースには入力した値が挿入されている。（↓の例の場合はネオ山田が入力される）

```java=
//前略
String sql = "INSERT INTO user_table VALUES(?,?,?)";


PreparedStatement stmt = con.prepareStatement(sql);
			
//パラメータ指定(例)　(第１引数, 第２引数)
//第１引数は、テーブルのカラム(列)の番号を示し、
//第２引数は新たにテーブルに挿入する値を示している。
stmt.setInt(1, 11);
stmt.setString(2, "ネオ山田");
stmt.setString(3, "012010200120");


//SQLの実行
stmt.executeUpdate();

//後略
```
前の作業で使った以下の３つはコメントアウトしてかまわない
１，名前の入力
２，ResultSet rs = stmt.executeQuery()
３，While文

### MySQLでの出力結果
![](https://i.imgur.com/EhvKPpq.png)
