数据库:
CREATE PROCEDURE pro_user(
IN username1 VARCHAR(20),OUT count_num INT
)

BEGIN
SELECT count(*) into count_num from user where username =username1;
END;
DROP PROCEDURE IF EXISTS pro_user;

java代码示例:
public static void main(String[] args){

    //加载驱动类
    Connection connection  =null;
    PreparedStatement ps =null;
    try {
        //下面好几个接口都是java自带的jdbc里面的接口,几乎没有mysql包里面的接口   实现类是mysql实现的
        Class.forName("com.mysql.jdbc.Driver");//这个就是利用反射加载类了
        //建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时,这是Connection对象
        //管理的一个要点)
        //真正开发中,为了提高效率,都会使用连接池来管理对象信息
        connection  =DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8","root","123456");
        String sql = "{CALL pro_user(?,?)}"; //调用存储过程  参数要写对  结果放到后面
        CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm
        cstm.setString(1, "yiyi"); //存储过程输入参数
        cstm.registerOutParameter(2, Types.INTEGER); // 设置返回值类型 即返回值
        cstm.execute(); // 执行存储过程
        System.out.println(cstm.getInt(2));
        cstm.close();
        connection.close();

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{

        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


    }
}