# 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」と入力されても検索結果を表示できないようにする ①この2つを追加 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); //パラメータ指定(例) (第1引数, 第2引数) //第1引数は、テーブルのカラム(列)の番号を示し、 //第2引数は新たにテーブルに挿入する値を示している。 stmt.setInt(1, 11); stmt.setString(2, "ネオ山田"); stmt.setString(3, "012010200120"); //SQLの実行 stmt.executeUpdate(); //後略 ``` 前の作業で使った以下の3つはコメントアウトしてかまわない 1,名前の入力 2,ResultSet rs = stmt.executeQuery() 3,While文 ### MySQLでの出力結果 ![](https://i.imgur.com/EhvKPpq.png)