A segunda resposta revisada de Bozho estava próxima, mas não exatamente lá. Isso me levou à resposta embora.
Tomando o exemplo de código com o qual comecei, acabamos com:
CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
int returnValue = proc.getInt(1);
As peças-chave aqui são o "? =" na frente da "chamada" no
prepareCall
função que configura um local para o valor de retorno e o registerOutputParameter
. Tem que ser registrado como Integer, pois o valor de retorno é sempre um int (pelo menos no SQL Server, talvez seja diferente em outros BDs). Portanto, você deve obtê-lo usando getInt
. Testei esse método e funciona.