java jdbc 执行存储过程 和自定义函数
1、创建存储过程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,…]])
[characteristic …] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT ‘string’
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
create PROCEDURE select_security_user(in user_id INTEGER)
BEGIN
select * from security_user where id = user_id;
END
查询数据库中的存储过程
方法一:
select name
from mysql.proc where db = ‘your_db_name’ and type
= ‘PROCEDURE’
方法二:
show procedure status;
查看存储过程或函数的创建代码
show create procedure proc_name;
show create function func_name;
CallableStatement cs = (CallableStatement) conn.prepareCall(“{call select_security_user(?)}”);
cs.setInt(1, 1);
rs = cs.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(“username”) + ” ” + rs.getString(“password”));
}
2、创建自定函数
CREATE FUNCTION fn_name(func_parameter[,…])
RETURNS type
[characteristic…]
routine_body
create function fun_select_user(user_id INTEGER) RETURNS VARCHAR(200) CHARACTER set utf8
reads sql DATA
begin
DECLARE name VARCHAR(10)CHARACTER set utf8;
select username INTO NAME from security_user where id = user_id;
return name;
end;
show create function func_name;
//函数可以嵌入到Sql中
String sql = “select fun_select_user(?) from dual”;
//调用方式还是和使用ps调用普通SQL一样
ps = (PreparedStatement) conn.prepareStatement(sql);
ps.setObject(1, 1);
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}