import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

public class ProcedureDemo {

//	调用mysql的存储过程
//    演示JDBC操作MySQL存储过程
	public static void main(String[] args) {

		Connection conn = null;
         //调用存储过程专用的接口
		CallableStatement cstmt = null;
		ResultSet rs = null;
		String url = "jdbc:mysql://localhost:3306/mydb2?user=root&password=123456";
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url);
              //存储过程特定的语法

              String sql = "{call add_pro(?,?,?)}"; 
              cstmt = conn.prepareCall(sql );
//             绑三个参数(前二个是输入,后一个是输出)
			cstmt.setInt(1, 100);
			cstmt.setInt(2, 200);
//			//注册一个输出参数,
			//其中Types.INTEGER表示SQL与JDBC之前的是映射类型
			cstmt.registerOutParameter(3,Types.INTEGER);
			//调用存储过程
			boolean i = cstmt.execute();
			System.out.println("flag : "+i);
			//取得执行结果
			int sum = cstmt.getInt(3);
			System.out.println("sum : "+sum);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			
			try {
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(cstmt!=null)
					cstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(conn!=null)
					conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}
执行结果:

flag : false
sum : 300

注意: 先要在mysql中执行delimiter //

    然后在mysql中创建存储过程

create procedure add_pro(a int,b int , out sum int)
begin
set sum = a + b;
end;

by hacket