欢迎进入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 {
UQCMS云商是一款B2B2C电子商务软件 ,非常适合初创的创业者,个人及中小型企业。程序采用PHP+MYSQL,模板采用smarty模板,二次开发,简单方便,无需学习其他框架就可以自行模板设计。永久免费使用,操作简单,安全稳定。支持PC+WAP+微信三种浏览方式,支持微信公众号。
1
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对象遍历得到的数据。

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号