プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Oracle
  • 【Java】PreparedStatementによるINSERT文の実行
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Java】PreparedStatementによるINSERT文の実行

04.22

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

「PreparedStatement」は、「Statementインターフェイス」のサブインターフェイスになり、文字通り「準備されたSQLを発行するインターフェイス」になります。

準備されたSQLとは、プリコンパイル(既にコンパイル済み)のSQLのことを指します。

Statementとの違いは?

メリット

パフォーマンスの向上が期待できる。

下記の性質により、パフォーマンスの向上が期待できます。

  •  既にコンパイルされたSQLを発行することになる。
  • 前回利用した際のキャッシュを再利用することで、データベースの処理スピードが上がる。

ただし、Webアプリケーションの場合は、リクエストの度にConnectionを閉じてしまい、PreparedStatementも破棄してしまいますので、キャッシュがクリアされてしまいあまり大きな恩恵を受けることができません。ただ、アプリケーションサーバーによっては、Connectionを閉じても、PreparedStatementを閉じないものもあります。

SQLインジェクションに強く、楽。

SQLにパラメータを埋め込む際に、自動的にエスケープしてくれるので、プログラマでエスケープ処理を書く必要がありません。

デメリット

メンテがしずらい。

数値を指定して、動的にパラメータを埋め込むので、動的にSQLを作成する場合等は、後でメンテがしずらくなってしまいます。

PreparedStatementでINSERT文を発行するサンプル

package oracletest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class OracleInsert {

	public static void main(String[] args) throws Exception {

		Connection con = null;
		PreparedStatement presmt = null;
		ResultSet rs = null;

		//ホスト名
		String hostname = "localhost";
		//SID
		String sid = "orcl";
		//ユーザー名
		String username = "orauser";
		//パスワード
		String passwd = "orapass";
		//SQL
		String sql = "INSERT INTO USER_MASTER VALUES (?,?,?)";


		try {
		    Class.forName("oracle.jdbc.driver.OracleDriver");
		    con = DriverManager.getConnection(
		    		"jdbc:oracle:thin:@" + hostname + ":1521:" + sid,username,passwd);

			presmt = con.prepareStatement(sql);

			presmt.setString(1,"0023");
			presmt.setString(2,"1002");
			presmt.setString(3,"田中太郎");

			presmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		}

		presmt.close();
        con.close();
    }

}

ポイント

String sql = "INSERT INTO USER_MASTER VALUES (?,?,?)";
presmt = con.prepareStatement(sql);
presmt.setString(1,"0023");
presmt.setString(2,"1002");
presmt.setString(3,"田中太郎");

上記の「?」という記述は、「パラメータ変数」と呼びます。「パラメータ変数」に対して、?の番地に値を代入しています。この際に自動に変数のエスケープもしてくれるので、SQLインジェクションにも強くなります。

スポンサーリンク
  • 2018 04.22
  • miyabisan2
  • コメントを書く
  • Java, Oracle
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 05.05

    【Java】テキストファイルの読み書き(サンプルあり)

  2. 2018 05.13

    【GoFのデザインパターン】「Flyweight(フライウェイト)」ってどんなパターン?

  3. 2018 05.04

    【Java】Apache Mavenの基礎知識

  4. 2018 05.03

    【Oracle】実行計画作成後のSQL実行時の動作の仕組み(アクセスパス)

  5. 2018 05.27

    【Oracleアーキテクチャ】「REDOログファイル」、「REDOログバッファ」について

  6. 2018 05.02

    【Java】ジェネリクス(<>)って何?使うメリット等。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Java】JDBCプログラムを理解する。

【Java】JDBCをWebアプリで使う場合で考慮する…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー