mysql必知必会(五)
2015-07-12 13:02
531 查看
如何在java中调用存储过程,下面分三种做介绍:调用传入值的存储过程、调用有返回结果集的存储过程、调用有返回值和传入值的存储过程。
1.调用传入值的存储过程
创建存储过程:
测试:
在java中调用:
引用了CallableStatement接口
使用 {CALL save(?,?,?)}的形式
有几个问号“?”,set几个值
2.调用有返回结果集的存储过程
创建存储过程:
在java中调用:
3.调用有返回值和传入值的存储过程
穿件存储过程:
测试:
在java中调用
使用cs.registerOutParameter(1, Types.INTEGER);
第几个问号“?”需要返回值就用其对应的号和types.的相应类型接收
执行过后用 cs.getInt(1);获取
1.调用传入值的存储过程
创建存储过程:
delimiter// create procedure save(in pname varchar(20),in price float,in tid int) begin insert into product(prodname,prodprice,typeid) values(pname,price,tid) end// delimiter;
测试:
CALL save("mi2",599,2);
在java中调用:
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; public class ProcedureTest { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db","root","root"); //调用传入值的存储过程 CallableStatement cs = con.prepareCall("{CALL save(?,?,?)}"); cs.setString(1, "xiaomi"); cs.setFloat(2, 1999); cs.setInt(3, 3); cs.executeUpdate(); cs.close(); con.close(); } }
引用了CallableStatement接口
使用 {CALL save(?,?,?)}的形式
有几个问号“?”,set几个值
2.调用有返回结果集的存储过程
创建存储过程:
DELIMITER // CREATE PROCEDURE findAll() BEGIN SELECT * FROM product; END// DELIMITER ; CALL findAll();
在java中调用:
package com.xingguo.pm.test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; public class ProcedureTest { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db","root","root"); //调用返回结果集的存储过程 CallableStatement cs = con.prepareCall("{CALL findAll()}"); ResultSet rs = cs.executeQuery(); while(rs.next()){ String name = rs.getString("prodname"); float price = rs.getFloat("prodprice"); int tid = rs.getInt("typeid"); System.out.println(name+":"+price+":"+tid); } rs.close(); cs.close(); con.close(); } }
3.调用有返回值和传入值的存储过程
穿件存储过程:
DELIMITER // CREATE PROCEDURE save_id(OUT pk INT,IN pname VARCHAR(20),IN price FLOAT,IN tid INT) BEGIN INSERT INTO product(prodname,prodprice,typeid) VALUES(pname,price,tid); SELECT LAST_INSERT_ID() INTO pk; END// DELIMITER ;
测试:
CALL save_id(@pk,'mi2s',499,4);
在java中调用
package com.xinguo.pm.test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Types; public class ProcedureTest { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db","root","root"); //调用有返回值的存储过程 CallableStatement cs = con.prepareCall("{CALL save_id(?,?,?,?)}"); cs.registerOutParameter(1, Types.INTEGER); cs.setString(2, "iphone6"); cs.setFloat(3, 5599); cs.setInt(4, 5); cs.executeUpdate(); int pk = cs.getInt(1); System.out.println("主键:"+pk); cs.close(); con.close(); } }
使用cs.registerOutParameter(1, Types.INTEGER);
第几个问号“?”需要返回值就用其对应的号和types.的相应类型接收
执行过后用 cs.getInt(1);获取
相关文章推荐
- mysql yum 安装
- 报错:1130-host ... is not allowed to connect to this MySql server
- 学习笔记-MYSQL
- mysql的可重复读REPEATABLE READ隔离级别和幻读
- MySQL 备份与还原详解
- MySQL之alter语句用法总结
- 【转】mysql-5..6.23-win64.zip安装及配置
- mysql储存过程以及定时调度清除数据
- ubuntu在terminal下安装mysql
- mysql导入数据库和导出数据库
- mysql常用函数
- MySql source 命令注意点
- MySQL的root密码忘记后重置方法
- 在同一台电脑上配置两个mysql数据库(解压版)
- mysql中 find_in_set()函数的使用
- MySQL的配置
- MySQL Cluster 核心概念
- MySQL的调优
- 安装MySQL最后一步出现错误Error Nr.1045解决方法
- mysql的使用