Procedure chamada via java (erro)

6 respostas
M

Olá a todos, to empacado num erro que ja tentei de tudo e não consigo resolver.

Tenho 2 procedures no meu BD. as 2 eu consigo executar via BD, mas via aplicacao JAVA so consigo rodar UMA, a outra da um erro.
Vejam:

Procedure que RODA(OK).
try {
            CallableStatement st = c.getConexao().prepareCall("{call sp_ins_ev(?,?,?,?,?,?,?)}");
            st.registerOutParameter(7, Types.VARCHAR);
            st.setInt(1, ev.getCodigo());
            st.setString(2, ev.getNomelocal());
            st.setString(3, ev.getEndereco());
            st.setString(4, ev.getCidade());
            st.setString(5, ev.getEstado());
            st.setString(6, ev.getTipo());
            st.execute();
            result = st.getString(7);
            } catch (SQLException ex) {
            ex.printStackTrace();
            }
            return result;
PROCEDURE Q NAO RODA(ERRO);
try {
            CallableStatement statement = c.getConexao().prepareCall("{call sp_ins_teatro(?,?,?,?,?,?,?,?)}");
            statement.registerOutParameter(8, Types.VARCHAR);
            statement.setInt(1, ev.getCodigo());
            statement.setString(2, t.getNome());
            statement.setDate(3, new java.sql.Date(t.getData_inicio().getTime()));
            statement.setDate(4, new java.sql.Date(t.getData_fim().getTime()));
            statement.setDouble(5, t.getValor());
            statement.setInt(6, t.getLugares_disponiveis());
            statement.setInt(7, t.getLugares_vendidos());
            statement.execute();
            result = statement.getString(8);

        } catch (SQLException ex) {
            ex.printStackTrace();
        }
            return result;
O ERRO:
org.postgresql.util.PSQLException: ERROR: function sp_ins_teatro(integer, character varying, unknown, unknown, double precision, integer, integer) does not exist
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)

O que eu não consigo entender é que pra mim, as 2 tao identicas, msm sintaxe, etc... no banco rodo de boa.. apenas via aplicacao que não rola.
E se eu usar "manual" usando select na aplicacao também roda, apenas via CallableStatement que não to conseguindo, só que preciso do retorno da procedure.. por isso não uso via select convencional.

Qualquer ajuda é bem vinda.

Abraço a todos.

6 Respostas

pmlm

O problema deve estar nas Datas. São DATE na BD?

yorgan

Tente utilizar o statement.setTimestamp( );

[]´s

Daniel

M

Obrigado a todos pela ajuda, mas continuo com o problema.

No java a classe ta em Date, no postgres ta em timestamp…o mais invocado é que antes também tinha uma procedure com timestamp e efetuei a mesma concatenação (java.sql.Date(…getTime()) e deu certo… eu ja to P*** da vida com isso.

Ja tentei tb o statement.setTimestamp( ); só que da a exeção dizendo que o valor é nulo =/

No postgres consigo rodar beleza minha procedure.

Agradeço a atenção de todos.

Abraço!

PS: AH, so mais uma coisa… tem como eu pegar o retorno da procedure sem usar o CallableStatement?via select msm ?

Abraço!

yorgan

já tentou passar um valor fixo para ver se ele roda normalmente?
Tipo assim:

statement.setTimestamp(3, new Timestamp(System.currentTimeMillis()));  
     statement.setTimestamp(4, new Timestamp(System.currentTimeMillis()));

[]´s

M

Galera, será que o erro se deve ah essa procedure depender de uma tabela que depende de outra tabela?
explico.

Na procedure que ta OK, eu insiro dados atraves de uma view, onde essa view aponta para uma tabela cuja chave primaria é chave primaria e estrangeira ao mesmo tempo, ou seja, a chave dela TEM QUE SER A MESMA da tabela “principal” ja a outra n tem problema…
Seria isso?

aguardo qualquer dica.

abraço!

rodrigo.bossini

O erro diz que a proc sp_ins_teatro não existe.

Criado 2 de junho de 2009
Ultima resposta 31 de ago. de 2009
Respostas 6
Participantes 4