mysql存储过程以及java中如何调取存储过程
mysql存储过程
随便使用了一张现有表customs,实现简单的存储过程
- 改变声明语句结束符号,默认为分号,这里自定义为$
mysql> delimiter $
- 声明存储过程(业务逻辑为删除操作)
mysql> create procedure proc_del(in usid integer)
-> begin
-> delete from customs where userid=usid;
-> end$
- 改回语句结束符
mysql> delimiter ;
- 调用 call
mysql> call proc_del(3);
调用完毕查找表内容,可以发现userid为三的表内容被删除了
以上即是最为简单的mysql存储过程,这里我们可以把复杂的业务逻辑通过其隐藏起来,通过直接调用实现功能
java调取存储过程
//mysql声明存储过程
mysql> delimiter $
mysql> create procedure proc_sum(in num1 integer,in num2 integer,out he integer)
-> begin
-> set he=num1+num2;
-> end$
mysql> delimiter ;
//java中调取
public class myhheoru {
public static void main(String[] args) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.56.20:3306/mydemo","root","ok");
//调存储过程
CallableStatement cs = conn.prepareCall("{call proc_sum(?,?,?)}");
cs.setInt(1,20);
cs.setInt(2,30);
cs.registerOutParameter(3, Types.INTEGER);
cs.execute();
System.out.println(cs.getInt(3));
// PreparedStatement pstat = conn.prepareStatement("select func_sum(?,?) as res"); //写语句调取
// pstat.setInt(1,20);
// pstat.setInt(2,30);
// ResultSet rs = pstat.executeQuery();
// while (rs.next()){
// System.out.println(rs.getInt("res"));
// }
conn.close();
}
}
结果展示