LoginSignup
13
8

More than 3 years have passed since last update.

【Java・JDBC】INSERT, UPDATE, DELETEを実行する

Posted at

INSERT, UPDATE, DELETEを実行する

一言まとめ

DB接続からSQLの値を書き換える方法についてのメモです。

executeUpdate() 【戻り値で更新行数を返却】

SQLのINSERT文、UPDATE文、DELETE文の実行は、executeUpdate() メソッドを使用します。
executeUpdate()メソッドは、前処理済みのINSERT文,UPDATE文,およびDELETE文を実行した場合、戻り値で更新行数が返却されます。これら以外のSQL文を実行した場合は,0が返却されます。

Statement statement = connection.createStatement();
String SQL = "INSERT INTO テーブル名(カラム名, カラム名, ...) VALUES( 値, 値, ...) ";
statement.executeUpdate(SQL);

PreparedStatementインタフェース

PreparedStatementインタフェースとは
PreparedStatementインタフェース は、何回もSQL文を生成しなくても済むように改良されたクラスです。

PreparedStatementクラスのメリット 【処理が早い】

DB接続の処理を PreparedStatementクラスを使用するのが流行っているようで、その理由は以下です。

  • SQLインジェクション対策になる
  • SQLがDBにキャッシュされるので同じSQL文を発行する場合処理速度が速い

【使用方法】PreparedStatementクラスの使用方法

PreparedStatementインタフェースは、 prepareStatement() メソッドにSQL文の引数を指定して生成します。

引数に指定するのは、以下のような実行したいSQL文の値を?に置き換えたSQL文です。

String SQL = "INSERT INTO テーブル名(列名, 列名, …) VALUES( ?, ?, …) ";

setXXX()メソッド

該当する行の任意の列の取得には、「setXXX()」メソッドを使用します。
データ型によって以下のメソッドで使い分けます。

  • 文字列など: setString()メソッド
  • 整数: setInt()メソッド, setLong()メソッド
  • 日付: setDate()メソッド

第1、第2引数に当てるものは以下です。

  • 第1引数: 左から何番目の「?」かを指定
  • 第2引数: 値 を指定

DB接続からUPDATEまでの手順

  1. 実行したいSQL文の値を「?」に置き代える
    • 「?」をシングルクォートで囲む必要なし
  2. PreparedStaetmentクラスのオブジェクトを取得する。
    • Connectionクラスのオブジェクト.preparedStatement()で取得
    • 引数でSQL文も渡す
  3. PreparedStatementクラスのオブジェクト.setHoge()で、?に値を挿入
    • その際、整数型の場合はsetInt()、文字列型の値の場合はsetString()
  4. 引数には、?の位置を指定。
    • SQL文の左側の?から1番目の?なら、第一引数に1
    • 第二引数には 挿入したい値 を渡す
  5. PreparedStatementクラスのオブジェクト.executeQuery()または.executeUpdate()で実行
    • 返却されるResultSetの有無で使用するメソッドが変わる
    • 実行時のexecuteUpdate() メソッドに 引数は要らないので注意
    • select文の場合には、 executeQuery() メソッドで対応する

【サンプルコード1】

String SQL = "INSERT INTO テーブル名(列名, 列名, …) VALUES( ?, ?, …) ";
// 上記のSQL文を受け取って接続
PreparedStatement preparedStatement = connection.prepareStatement(SQL);

for (int i = 0; i < 3; i++) {
      // 値が文字列で、?の位置が左から 1番目
    preparedStatement.setString(1, );
      // 値が整数で、?の位置が左から 2番目
    preparedStatement.setInt(2, );
    ・・・
        // アップデートを実行する (引数はいらない)
    preparedStatement.executeUpdate();
}

【サンプルコード2】 カラム「id」の値をしてしてSELECTしたデータを取得

// SQL文を格納する
String SQL = "SELECT カラム名 FROM テーブル名 WHERE id = ?";
Statement st = con.preparedStatement(SQL);
// 下記は「1番目の?の値が1のデータ」と言う意味になる。
st.setInt(1, 1);
//SELECTの場合は、executeQuery() メソッド実行する
ResultSet rs = st.executeQuery();

【まとめ】

色々と手順を踏むことはあるが、カンペを読みながら覚えていこうと思います。
訂正や加筆が必要な部分は遠慮なくお願いいたします。

参考文献・記事

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8