ホームページ >データベース >mysql チュートリアル >Java mysqlストアドプロシージャ
Java と MySQL は広く使用されている 2 つのテクノロジですが、これらを使用する場合、多くの場合、ストアド プロシージャを使用してデータを処理する必要があります。ストアド プロシージャは、データベース内に定義された再利用可能なコード ブロックで、特定のタスクを実行するために必要なときに呼び出すことができます。この記事では、Java と MySQL のストアド プロシージャの作成方法と呼び出し方法を紹介します。
1. MySQL ストアド プロシージャとは何ですか?
MySQL では、ストアド プロシージャは、再利用可能で実行可能なプロセスを形成するために特定の論理順序で結合される、事前定義された SQL ステートメントのコレクションです。ストアド プロシージャは、複雑なビジネス ロジックを処理したり、データに対してバッチ操作を実行したりするためによく使用されます。通常の SQL ステートメントとは異なり、ストアド プロシージャはパラメーターを受け入れてデータを返すことができるため、複雑なビジネス ロジックを処理する際にストアド プロシージャがより柔軟かつ効率的になります。
2. MySQL ストアド プロシージャの作成方法
MySQL では、CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成できます。 CREATE PROCEDURE ステートメントの基本的な構文は次のとおりです。
CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] parameter_name data_type[, ...]) BEGIN -- 存储过程的SQL语句块 END
このうち、procedure_name はストアド プロシージャの名前、parameter_name はストアド プロシージャのパラメータ名、data_type はパラメータのデータ型です。 。ストアド プロシージャ内の SQL ステートメント ブロックは、BEGIN と END の間に配置されます。
次は、円の円周と面積を計算するストアド プロシージャを作成する方法を示す簡単な例です:
CREATE PROCEDURE calc_circle(IN r INT, OUT circumference FLOAT, OUT area FLOAT) BEGIN SET circumference = 2 * PI() * r; SET area = PI() * r * r; END
このストアド プロシージャは、r という名前の整数パラメータを受け取り、次の値を返します。円の周囲と面積。ストアド プロシージャでは、MySQL の組み込み PI() 関数を使用して pi を計算します。周長と面積はそれぞれ周長と面積の出力パラメータであり、SET ステートメントを使用してその値を対応する計算結果に設定します。
3. MySQL ストアド プロシージャを呼び出す方法
MySQL でストアド プロシージャを作成したら、Java でそれを呼び出すことができます。 JDBC (Java Database Connectivity) テクノロジーを使用して MySQL データベースに接続し、プリコンパイルされたステートメントを使用してストアド プロシージャを呼び出すことができます。以下は、作成したばかりの calc_circle ストアド プロシージャを呼び出す方法を示す基本的な Java コードの例です:
import java.sql.*; public class CallSPDemo { public static void main(String[] args) { Connection conn = null; CallableStatement cs = null; try { // 连接MySQL数据库 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); // 创建CallableStatement对象 String sp = "{CALL calc_circle(?, ?, ?)}"; cs = conn.prepareCall(sp); // 设置输入参数 cs.setInt(1, 5); // 设置输出参数类型 cs.registerOutParameter(2, Types.FLOAT); cs.registerOutParameter(3, Types.FLOAT); // 执行存储过程 cs.execute(); // 获取输出参数值 float circum = cs.getFloat(2); float area = cs.getFloat(3); // 输出结果 System.out.println("Circumference: " + circum); System.out.println("Area: " + area); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (cs != null) cs.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
コードでは、java.sql パッケージの Connection クラスと CallableStatement クラスを使用して、MySQL データベースに接続します。そしてストレージプロセスを呼び出します。 main() メソッドでは、まず Connection オブジェクトと CallableStatement オブジェクトを定義します。次に、MySQL データベースに接続し、prepareCall() メソッドを通じて CallableStatement オブジェクトを作成しました。 CallableStatement オブジェクトを作成するときは、ストアド プロシージャを作成するときと同じ構文を使用して、ストアド プロシージャの名前とパラメータを定義します。
次に、setInt() メソッドを使用して、ストアド プロシージャの入力パラメーター r の値を 5 に設定します。次に、 registerOutParameter() メソッドを使用して、結果セットの出力パラメータのタイプを定義します。ここでは FLOAT タイプです。最後に、execute() メソッドを使用してストアド プロシージャを実行し、getFloat() メソッドを使用して出力パラメータの値を取得します。出力パラメータの値を取得する前にストアド プロシージャを実行する必要があることに注意してください。
最後に、計算された円の円周と面積を出力します。
4. ストアド プロシージャの利点
MySQL ストアド プロシージャを使用する利点は、ビジネス ロジックをデータベース操作から適切に分離し、コードの再利用を実現できることです。さらに、ストアド プロシージャを使用すると、データベースのパフォーマンスとセキュリティも向上します。
まず第一に、ストアド プロシージャはデータベースのパフォーマンスを向上させることができます。これは、ストアド プロシージャが実行されるときにプリコンパイルされてサーバーにキャッシュされ、実行速度が向上するためです。さらに、ストアド プロシージャを使用すると、複数のデータベース操作をマージできるため、データベースの接続と切断の数が減り、データベースのパフォーマンスが大幅に向上します。
2 番目に、ストアド プロシージャを通じてデータベース内のデータ アクセスを制御できるため、データベースのセキュリティが向上します。たとえば、特定の機密データ テーブルへのアクセスを制限し、承認されたユーザーのみがストアド プロシージャを実行してそれらのテーブルにアクセスできるようにすることができます。
要約すると、MySQL ストアド プロシージャは、データの処理と管理を改善できる非常に便利なテクノロジです。ストアド プロシージャの使用法を学習して習得することで、データベースの開発とメンテナンスの能力を向上させ、ビジネス ニーズにさらに応えることができます。
以上がJava mysqlストアドプロシージャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。