Maison >base de données >tutoriel mysql >简单使用MySQL的存储过程

简单使用MySQL的存储过程

WBOY
WBOYoriginal
2016-06-07 15:21:181196parcourir

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 简单使用MySQL的存储过程 MySQL5.0版本引进了存储过程的概念。存储过程可以提高执行效率,更容易维护。 在没有存储过程(procedure)概念之前,通常的业务逻辑sql代码有时很长,它们一般被嵌入在宿主

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  简单使用MySQL的存储过程

  MySQL5.0版本引进了存储过程的概念。存储过程可以提高执行效率,更容易维护。

  在没有存储过程(procedure)概念之前,通常的业务逻辑sql代码有时很长,它们一般被嵌入在宿主语言(比如Java)中,非常不便于维护,而有了存储过程,它们被定义在数据库端,并且进行了预编译。而且业务逻辑SQL代码无需在网络中传输,减轻了网络负担。可以说存储过程的优点大于它的缺点。 

  下面实现一个简单的加法存储过程。

  [sql]

  mysql> delimiter $

  mysql> create procedure pr_add (a int , b int)

  -> begin

  -> declare c int;

  -> if a is null then

  -> set a = 0;

  -> end if;

  -> if b is null then

  -> set b = 0;

  -> end if;

  -> set c = a + b;

  -> select c as sum;

  -> end;

  -> $

  在命令行模式中运行存储过程: 

  [sql]

  mysql> delimiter ;

  mysql> set @a = 10;

  Query OK, 0 rows affected (0.00 sec)

  mysql> set @b = 20;

  Query OK, 0 rows affected (0.00 sec)

  mysql> call pr_add(@a,@b);

  +------+

  | sum  |

  +------+

  |   30 |

  +------+

  1 row in set (0.00 sec)

  Query OK, 0 rows affected (0.00 sec)

  在客户端执行存储过程:

  [java]

  public class ProcedureTest {

  private static final String DB_URL = "jdbc:mysql://localhost:3306/zjut";

  private static final String DRIVER = "com.mysql.jdbc.Driver";

  private static final String USER = "root";

  private static final String PASSWORD = "XXXXX";

  private static String sql = "call pr_add(?,?)";

  public static void main(String[] args) {

  try {

  Class.forName(DRIVER);

  Connection conn = DriverManager.getConnection(DB_URL,USER,PASSWORD);

  CallableStatement cstmt = conn.prepareCall(sql);

  cstmt.setInt(1,10);

  cstmt.setInt(2, 20);

  ResultSet rs = cstmt.executeQuery();

  while(rs.next()) {

  System.out.println(rs.getInt("sum"));

  }

  } catch (ClassNotFoundException e) {

  e.printStackTrace();

  } catch (SQLException e) {

  e.printStackTrace();

  }

  }

  }

  关键代码是:

  [java]

  CallableStatement cstmt = conn.prepareCall("call pr_add(?,?)");

  cstmt.setInt(1,10);

  cstmt.setInt(2, 20);

  ResultSet rs = cstmt.executeQuery();

  输出:

  30

  原理:首先创建SQL字符串,即 "call pr_add(?,?)" ,调用存储过程用call命令,call命令后跟存储过程名字,两个问号是占位符。

  使用Connection对象创建CallableStatement对象,即 conn.prepareCall(sql); 该方法接受一个字符串,代表一个sql语句。

  再用CallableStatement对象的executeQuery()执行SQL语句,返回一个ResultSet对象。

  利用ResultSet对象遍历得到的数据。

简单使用MySQL的存储过程

Déclaration:
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