Maison > base de données > tutoriel mysql > le corps du texte

Pouvons-nous appeler une fonction à l'aide de l'instruction Callable ? Pouvez-vous l'expliquer à l'aide d'un exemple JDBC ?

WBOY
Libérer: 2023-08-27 18:37:09
avant
478 Les gens l'ont consulté

我们可以使用 Callable 语句调用函数吗?能用 JDBC 的例子解释一下吗?

Comme les procédures, vous pouvez également créer des fonctions dans la base de données et les stocker.

Syntaxe

Voici la syntaxe pour créer une fonction dans une base de données (MySQL) :

Syntaxe

Voici la syntaxe pour créer une fonction dans une base de données (MySQL) : p>

CREATE FUNCTION Function_Name(input_arguments) RETURNS output_parameter
BEGIN
   declare variables;
   statements . . . . . . . . . .
   return data_type;
   END
Copier après la connexion

Exemple

Supposons qu'il y ait est une base de données nommée Emp's table avec le contenu suivant :

+--------+------------+----------------+
| Name   | DOB        | Location      |
+--------+------------+----------------+
| Amit   | 1970-01-08 | Hyderabad      |
| Sumith | 1970-01-08 | Vishakhapatnam |
| Sudha  | 1970-01-05 | Vijayawada     |
+--------+------------+----------------+
Copier après la connexion

Un exemple de création de fonction est donné ci-dessous. Ici, nous créons une fonction appelée getDob() qui accepte le nom de l'employé, récupère et renvoie la valeur de la colonne 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
Copier après la connexion

Appelez une fonction à l'aide de JDBC

Vous pouvez appeler une fonction à l'aide d'un objet CallableStatement tout comme une procédure stockée pour appeler une fonction à l'aide du programme JDBC dont vous avez besoin.

  • Connectez-vous à la base de données.

  • Créez un objet PreparedStatement et transmettez son constructeur pour appeler la fonction au format chaîne.

  • Définissez la valeur comme espace réservé.

  • Exécutez l'instruction Callable.

Voici la requête qui appelle la fonction depuis JDBC :

{? = call getDob(?)}
Copier après la connexion

Comme vous pouvez le constater, la requête contient des espaces réservés (?), tout comme les instructions préparées et les instructions appelables.

Dans la requête ci-dessus, le premier espace réservé représente la valeur de retour de la fonction et le deuxième espace réservé représente l'entrée

Vous devez utiliser la méthode registerOutParameter() de l'interface CallableStatement pour placer l'espace réservé représentant la valeur de retour Enregistré comme paramètre de sortie. Pour cette méthode, vous devez transmettre une valeur entière représentant la position de l'espace réservé et une variable entière représentant le type SQL (du paramètre)

cstmt.registerOutParameter(1, Types.DATE);
Copier après la connexion

Utilisez la méthode setString() pour définir la valeur du paramètre d'entrée. (Car la fonction getDoc() accepte les valeurs de type VARCHAR).

Exemple

Le programme JDBC suivant exécute la fonction getDob et récupère le résultat :

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));
   }
}
Copier après la connexion

output

Connection established......
Date of birth: 1970-01-08
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal