设为首页 加入收藏

TOP

MySQL存储过程以及在Java中的程序调用(一)
2015-08-31 19:59:54 来源: 作者: 【 】 浏览:61
Tags:MySQL 存储 过程 以及 Java 程序 调用

存储过程是一种存储在数据库中的程序(就像正规语言里的子程序一样),准确的来说,MySQL支持的“routines(例程)”有两种:一是我们说的存储过程, 二是在其他SQL语句中可以返回值的函数(使用起来和Mysql预装载的函数一样,如pi())。本文是为初学习MySQL存储过程的朋友写的,在本文中我们以在MySQL的CLI(command line interface)中建立一个存储过程的示例开始,然后通过在Java程序中调用我们创建好的存储过程,让读者对MySQL的存储过程有个大概的了解和入门。


一、创建MySQL存储过程示例


下面是具体的创建过程:


--启动MySQL服务
C:/Documents and Settings/Zengming Zhang>net start mysql


MySQL 服务已经启动成功。


--登录MySQL控制台
C:/Documents and Settings/Zengming Zhang>mysql -u root -p
Enter password: **********
Welcome to the MySQL monitor.? Commands end with ; or /g.
Your MySQL connection id is 1 to server version: 5.0.18-nt


Type 'help;' or '/h' for help. Type '/c' to clear the buffer.


--选择数据库
mysql> use test;
Database changed


--创建示例用表
mysql> create table zzm(
? ? -> id int primary key auto_increment,
? ? -> name varchar(10)
? ? -> );
Query OK, 0 rows affected (0.20 sec)
mysql> insert into zzm(name) values('zhang');
Query OK, 1 row affected (0.08 sec)


mysql> insert into zzm(name) values('zeng');
Query OK, 1 row affected (0.05 sec)


mysql> insert into zzm(name) values('ming');
Query OK, 1 row affected (0.05 sec)


mysql> select * from zzm;
+----+-------+
| id | name? |
+----+-------+
|? 1 | zhang |
|? 2 | zeng? |
|? 3 | ming? |
+----+-------+
3 rows in set (0.00 sec)


--更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)
--所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)
--这里将结束符号改成美元符号--$
mysql> delimiter $


--创建存储过程p3
--此存储过程的过程名是p3,该过程包含两个参数,
--一个是输入类型的(以IN标示),参数名是nameid,类型是int,
--一个是输出类型的(以OUT标示),参数名是person_name,类型是varchar(10)
--此存储过程的作用是查询出zzm表的全部内容,会输出结果集(data set),然后
--再查询表中记录的ID是nameid的字段name,将其输出到第二个输出类型的参数里面,这个查询
--不会输出结果集。
mysql> create procedure p3(IN nameid int, OUT person_name varchar(10))
? ? -> begin
? ? -> select * from test.zzm;
? ? -> select zzm.name into person_name from test.zzm where zzm.id = nameid;
? ? -> end
? ? -> $
Query OK, 0 rows affected (0.00 sec)


--创建完成,查看数据库中所有已经创建的存储过程
mysql> show procedure status $
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| Db? | Name | Type? ? ? | Definer? ? ? ? | Modified? ? ? ? ? ? | Created? ? ? ? ? ? | Security_type | Comment |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| test | p3? | PROCEDURE | root@localhost | 2009-08-18 16:40:21 | 2009-08-18 16:40:21 | DEFINER? ? ? |? ? ? ? |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+
1 row in set (0.02 sec)


--调用存储过程
mysql> call p3(3,@name) $
+----+-------+
| id | name? |
+----+-------+
|? 1 | zhang |
|? 2 | zeng? |
|? 3 | ming? |
+----+-------+
3 rows in set (0.00 sec)


Query OK, 0 rows affected (0.00 sec)


mysql> select @name $
+-------+
| @name |
+-------+
| ming? |
+-------+
1 row in set (0.00 sec)


二、在Java程序中调用存储过程的程序示例


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Types;


public class Main {


?public static void main(String[] args) {
? /* JDBC连接MySQL数据库的参数 */
? String driverName = "com.mysql.jdbc.Driver";
? String userName = "root";
? String userPasswd = "nicegiving";
? String dbName = "test";
? String url = "jdbc:mysql://localhost/" + dbName + "?user=" + userName
? ? + "&password=" + userPasswd;
? Connection connection = null;
? CallableStatement stmt = null;
?
? try {
? // 加载数据库驱动程序
? Class.forName(driverName).newInstance();
? // 连接数据库
? connection =

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于增大Oracle表空间的方法 下一篇JDBC连接MySQL数据库的流程及其原..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: