ストアドプロシージャとは?JDBCプログラムでストアドプロシージャを呼び出す方法を解説
ストアドプロシージャとは
ストアドプロシージャ(Stored Procedure)とは、SQLカタログ内に保存されたサブルーチンのことで、一連のSQL文をまとめたものです。リレーショナルデータベースにアクセスできるすべてのアプリケーション(Java、Python、PHPなど)から、これらのプロシージャを呼び出して利用することができます。
ストアドプロシージャには、INパラメータ(入力用)、OUTパラメータ(出力用)、あるいはその両方を持たせることができます。また、内部でSELECT文を使用した場合は結果セットが返され、複数の結果セットを返すことも可能です。
前提となるテーブルの例
ここでは、MySQLデータベースにDispatchesという名前のテーブルがあり、以下のようなデータが格納されていると仮定します。
+--------------+------------------+------------------+------------------+ | Product_Name | Date_Of_Dispatch | Time_Of_Dispatch | Location | +--------------+------------------+------------------+------------------+ | KeyBoard | 1970-01-19 | 08:51:36 | Hyderabad | | Earphones | 1970-01-19 | 05:54:28 | Vishakhapatnam | | Mouse | 1970-01-19 | 04:26:38 | Vijayawada | +--------------+------------------+------------------+------------------+
さらに、このテーブルからすべての値を取得するためのmyProcedureというストアドプロシージャが、以下のように作成済みであるとします。
Create procedure myProcedure () -> BEGIN -> SELECT * from Dispatches; -> END //
JDBCでストアドプロシージャを呼び出す方法
JDBCからストアドプロシージャを呼び出すには、CallableStatementインターフェースを使用します。接続オブジェクトのprepareCall()メソッドに{call プロシージャ名()}という形式の文字列を渡すことで、CallableStatementを取得できます。
以下は、JDBCプログラムを使用して上記のストアドプロシージャを呼び出す具体例です。
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CallingProcedure {
public static void main(String args[]) throws SQLException {
// ドライバの登録
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// データベースへの接続を取得
String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("接続が確立されました......");
// CallableStatementの準備
CallableStatement cstmt = con.prepareCall("{call myProcedure()}");
// 結果セットの取得
ResultSet rs = cstmt.executeQuery();
while(rs.next()) {
System.out.println("製品名: "+rs.getString("Product_Name"));
System.out.println("出荷日: "+rs.getDate("Date_Of_Dispatch"));
System.out.println("出荷時刻: "+rs.getTime("Time_Of_Dispatch"));
System.out.println("場所: "+rs.getString("Location"));
System.out.println();
}
}
}実行結果
このプログラムを実行すると、以下のようにストアドプロシージャが返した結果セットがコンソールに出力されます。
接続が確立されました...... 製品名: KeyBoard 出荷日: 1970-01-19 出荷時刻: 08:51:36 場所: Hyderabad 製品名: Earphones 出荷日: 1970-01-19 出荷時刻: 05:54:28 場所: Vishakhapatnam 製品名: Mouse 出荷日: 1970-01-19 出荷時刻: 04:26:38 場所: Vijayawada
ポイントのまとめ
- ストアドプロシージャはSQLカタログに保存されたサブルーチンで、複数のアプリケーションから再利用可能。
- INパラメータ、OUTパラメータ、またはその両方を受け取ることができる。
- SELECT文を含む場合は結果セットを返し、複数の結果セットを返すことも可能。
- JDBCでは
Connection.prepareCall()でCallableStatementを生成し、{call プロシージャ名()}の形式で呼び出す。 - 結果の取得は通常の
executeQuery()と同様にResultSetとして受け取れる。
-
MySQL Workbenchでストアドプロシージャを作成・実行する方法
MySQL Workbenchでストアドプロシージャを作成する手順 まずは、ストアドプロシージャを作成してみましょう。以下は、MySQL Workbenchを使用してストアドプロシージャを作成するためのクエリ例です。 use business; DELIMITER // DROP PROCEDURE IF EXISTS SP_GETMESSAGE; CREATE PROCEDURE SP_GETMESSAGE() BEGIN DECLARE MESSAGE VARCHAR(100); SET MESSAGE="HELLO"; SELECT CONCAT(MESSAGE, ,
-
C言語のfloatはどのようにメモリに格納される?IEEE 754形式の仕組みを解説
C言語におけるfloat(浮動小数点数)とは C言語において、floatとは「floating point(浮動小数点)」の略称で、小数点以下の値を持つ数値を扱うためのデータ型です。では、この浮動小数点数はコンパイラやメモリ上にどのように格納されているのでしょうか。 浮動小数点数は、一般的にIEEE(Institute of Electrical and Electronics Engineers:米国電気電子学会)が定めたIEEE 754形式で表現されます。この形式では、数値を次の3つの要素に分解して格納します。 符号ビット(sign bit):数値の正負を表します。「0」なら正の値、「1