JDBC:Como acessar consultas internas que requerem parametros? (RESOLVIDO!)

1 resposta
kicolobo

Olá,
estou com o seguinte problema: infelizmente, preciso utilizar como base de dados um maldito banco de dados no formato Microsoft Access.

E, no mesmo, há uma série de consultas que necessáriamente precisamos acessar (não há tempo para reconstruí-las. Como em toda boa tragédia, estas são absurdamente complexas (criadas utilizando o MALDITO “construtor de expressões”)).

Se as consultas não tivessem parâmetros, seria fácil, pois as veriamos como se fossem tabelas normais (read only) do BD. No entanto, são consultas internas que requerem parâmetros. Pergunto: como defino os valores destes parâmetros usando Java? Como executo estas consultas?
Estas, são tidas como consultas (no caso, views parametrizadas) ou como stored procedures?

Alguém já passou por algo semelhante? TODA e qualquer ajuda seria bem vinda.

1 Resposta

kicolobo

Eis a solução: as consultas armazenadas em arquivos no formato Access encontram-se, na realidade, armazenadas como stored procedures.

Segue abaixo um código de exemplo (feito em Groovy) que exemplifica como chamar estes procedimentos internos:

cs = conexaoAccess.prepareCall("{call consultaArmazenada(andamento = ?,revisao = ?,parametroString = ?)}")

cs.setString(3, "*")
cs.setInt(2, -1)
cs.setInt(1, 8)

try
    {
        ResultSet rs = cs.executeQuery()
        print "Rolou total"
        while (rs.next())
        {
            print "\n" + rs.getString("campo")
        }
    }
catch (Exception ex)
    {
        print "\nCódigo do erro: ${ex.errorCode}"
        print "\nMensagem do erro: ${ex.message}"
        Exception proxima = ex.next
        print "\nCódigo da próxima: ${proxima == null ? 'Nada!' : proxima.message}"
    }

O problema, pelo que pude observar, consiste na ordem dos parâmetros passados. Como não há como saber a ordem destes parâmetros no Access, você acaba tendo de chutar sua ordem, literalmente. em nosso caso, os parâmetros do tipo String devem, necessáriamente, consistir nos últimos parâmetros da stored procedures.

Criado 9 de junho de 2008
Ultima resposta 10 de jun. de 2008
Respostas 1
Participantes 1