Maison  >  Article  >  base de données  >  Pouvons-nous appeler une fonction à l'aide de l'instruction Callable ? Pouvez-vous l'expliquer à l'aide d'un exemple JDBC ?

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

WBOY
WBOYavant
2023-08-27 18:37:09481parcourir

我们可以使用 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

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     |
+--------+------------+----------------+

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

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(?)}

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);

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 : p>

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));
   }
}

output

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer