您的位置:首页 > 数据库 > MySQL

mysql必知必会(五)

2015-07-12 13:02 531 查看
如何在java中调用存储过程,下面分三种做介绍:调用传入值的存储过程、调用有返回结果集的存储过程、调用有返回值和传入值的存储过程。

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);获取
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: