MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

Callableステートメントを使用して関数を呼び出すことはできますか? JDBCの例で説明しますか?


プロシージャと同様に、データベースに関数を作成して保存することもできます。

構文

以下は、(MySQL)データベースに関数を作成する構文です。

CREATE FUNCTION Function_Name(input_arguments) RETURNS output_parameter
BEGIN
   declare variables;
   statements . . . . . . . . . .
   return data_type;
   END

Empという名前のテーブルがあるとします。 次の内容のデータベース内:

+--------+------------+----------------+
| Name   | DOB        | Location      |
+--------+------------+----------------+
| Amit   | 1970-01-08 | Hyderabad      |
| Sumith | 1970-01-08 | Vishakhapatnam |
| Sudha  | 1970-01-05 | Vijayawada     |
+--------+------------+----------------+

以下に、関数の作成例を示します。ここでは、 getDob()という名前の関数を作成しています これは、従業員の名前を受け入れ、DOB列の値を取得して返します。

CREATE FUNCTION getDob(emp_name VARCHAR(50)) RETURNS DATE
BEGIN
declare dateOfBirth DATE;
select DOB into dateOfBirth from EMP where Name = emp_name;
return dateOfBirth;
END

JDBCを使用した関数の呼び出し

CallableStatementを使用して関数を呼び出すことができます ストアドプロシージャと同じように、必要なJDBCプログラムを使用して関数を呼び出すためのオブジェクト。

  • データベースに接続します。

  • PreparedStatementを作成します オブジェクトとそのコンストラクターに、関数呼び出しを文字列形式で渡します。

  • プレースホルダーに値を設定します。

  • Callableステートメントを実行します。

以下は、JDBCから関数を呼び出すためのクエリです。

{? = call getDob(?)}
を呼び出す

ご覧のとおり、クエリには、準備された呼び出し可能なステートメントと同じようにプレースホルダー(?)が含まれています。

上記のクエリでは、最初のプレースホルダーは関数の戻り値を表し、2番目のプレースホルダーは入力パラメーターを表します。

registerOutParameter()を使用して、戻り値を表すプレースホルダーを出力パラメーターとして登録する必要があります。 (CallableStatementインターフェイスの)メソッド。このメソッドには、プレースホルダーの位置を表す整数値と、(パラメーターの)SQL型を表す整数変数を渡す必要があります

cstmt.registerOutParameter(1, Types.DATE);

setString()メソッドを使用して、値を入力パラメーターに設定します。 (getDoc()関数はVARCHARタイプの値を受け入れるため)

次のJDBCプログラムは、関数 getDobを実行します。 結果を取得します:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class CallingFunctionsUsingCallable2 {
   public static void main(String args[]) throws SQLException {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");

      //Preparing a CallableStatement
      CallableStatement cstmt = con.prepareCall("{? = call getDob(?)}");

      cstmt.registerOutParameter(1, Types.DATE);
      cstmt.setString(2, "Amit");
      cstmt.execute();

      System.out.print("Date of birth: "+cstmt.getDate(1));
   }
}

出力

Connection established......
Date of birth: 1970-01-08

  1. JDBCを使用してデータベースからファイルを取得するにはどうすればよいですか?

    ResultSet インターフェイスは、 getClob()という名前のメソッドを提供します およびgetCharacterStream() Clobを取得するには データ型。通常、ファイルの内容が保存されます。 これらのメソッドは、列のインデックスを表す整数(または、列の名前を表す文字列値)を受け入れ、指定された列の値を取得します。 違いは、getClob()メソッドがClobオブジェクトを返し、getCgaracterStream()メソッドがClobデータ型のコンテンツを保持するReaderオブジェクトを返すことです。 例 次の説明を使用して、データベースにArticlesとい

  2. Pythonのfactorplot関数を使用してバイオリン図を視覚化する方法を説明してください。

    棒グラフ関数は、カテゴリ変数と連続変数の間の関係を確立します。データは長方形のバーの形式で表され、バーの長さはその特定のカテゴリのデータの割合を示します。 ポイントプロットはバープロットに似ていますが、フィルバーを表す代わりに、データポイントの推定値は、他の軸上の特定の高さのポイントで表されます。 カテゴリデータは、ポイントプロットまたはfactorplotと呼ばれる高レベルの関数を使用して、カテゴリ散布図または2つの別々のプロットを使用して視覚化できます。 factorplot関数は、パラメーター「kind」を使用して、FacetGridにカテゴリプロットを描画します。 ここでの「k