package search;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ProduceTest
{
public static void main(String[]args)
{
Connection conn=null;
try
{
conn=new ConnectionProvider().getConnection();
//CallableStatement cs=conn.prepareCall("call selectAll()");
CallableStatement cs=conn.prepareCall("call selectInfoByName(?)");
cs.setString(1,"yukjin");
ResultSet rs=cs.executeQuery();
while(rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
delimiter $
create procedure selectAll()
begin
select*from customers;
end;
$
create procedure selectInfoByName(In p_in varchar(16) charset 'utf8')
begin
select*from customers where name=p_in;
end;
$
以上程序调用mysql端的selectAll()和selectInfoByName(In p_in)存储过程
两个存储过程分别定义如下:
对于存储过程,mysql中有三类可传递的参数类型,IN,OUT,IN OUT。
IN型,必须在调用时指定具体值,并且在存储过程中即使改变也不返回。
OUT,用来存储返回的结果
IN OUT型,综合上面两种类型
OUT型在用java调用时必须使用registerOutParameter()注册。
注意:
假如存储过程的参数还有中文,那么为了避免出现乱码等问题,首先确保你的数据库,表以及字段的字符编码是否支持中文,最后在创建存储过程时需要显式声明参数字符集。