executeUpdate não funciona

5 respostas
M

Olá pessoal,

Estou fazendo meu primeiro programa usando jsp e servlets pra web, com acesso ao banco de dados firebird. Estou tendo um problema: passo a string de inserção para o executeUpdate e ele simplesmente nao funciona, retorna 0. Se eu inserir a mesma string através do IB_Expert, funciona perfeitamente, ou seja, o SQL está correto.

Acredito que não haja problema com a conexão, pq o troço conecta sem problema algum. De qualquer forma, vou postar uns trechos de códigos pra ver se algum de vocês pode me ajudar:

Código de conexão com o banco de dados (não dá nenhum erro nessa parte):

try{
          Class.forName("org.firebirdsql.jdbc.FBDriver");

          String url = "jdbc:firebirdsql:localhost/3050:E:\Leticia\Java\BD\teste.fdb";
          String username = "SYSDBA";
          String password = "masterkey";
          connection = DriverManager.getConnection(url, username, password);

       }catch(ClassNotFoundException ex){
          System.out.println("Não foi possível encontrar o driver");
       }catch(SQLException ex){
          System.out.println("Não foi possível conectar ao servidor");
       }

       try {
          statement = connection.createStatement();
       }catch(SQLException ex){
          System.out.println("Não foi possível conectar ao servidor");
       }

Montagem do SQL e chamada da função:

String codigo = req.getParameter("codigo");
             String nome = req.getParameter("nome");
             String descricao = req.getParameter("descricao");
             String unidade = req.getParameter("unidade");
             String custo = req.getParameter("custo");
             String estoque_min = req.getParameter("estoque_min");

             String sql="INSERT INTO MATERIA_PRIMA (CODIGO,NOME,DESCRICAO,UNIDADE,CUSTO,ESTOQUE_MIN) VALUES ('" +codigo+ "','" +nome+ "','" +descricao+ "','"+unidade+ "','"+custo+ "','"+estoque_min+"');";

              ConexaoBD con = null;
                try  {
                   con = new ConexaoBD();
                   int result = con.executeUpdate(sql);
                   if (result == 1) {
                       res.sendRedirect("/Cadastro/Efetuado.jsp");                       
                   }

O executeUpdate que está sendo chamado é uma função criada na classe de conexao, que chama o executeUpdate do statement. A função é:

public synchronized int executeUpdate(String update)throws SQLException {
       int result = 0;
       try{
        result = statement.executeUpdate(update);
       }catch(SQLException ex){
          System.out.println("Não foi possível executar o update");
       }
       return result;
    }

Nessa funcao, ao fazer o statement.executeUpdate passando a string, o troço simplesmente retorna 0, ou seja: não funciona.

Nem todo o código é de minha autoria, peguei bastante exemplos e foi em cima disso que saiu…

Desde já, agradeço a atenção

5 Respostas

T

Em alguns bancos, como o MS SQL Server, a atualização não requer que você abra e feche explicitamente uma transação.
Isso costuma depender do driver.
Veja se o “autoCommit” está ligado ou não - método getAutoCommit de java.sql.Connection, e se você pode ligar isso - setAutoCommit.

M

o autoCommit não estava ligado. Coloquei como true, mas não funcionou. Nenhum progresso ainda. Acredito que isso é porque mesmo estando o banco configurado para dar commit, se o INSERT não funcionou… então ele não tem nada pra dar commit.

Quanto à questão da transação, não entendi exatamente o que vc quis dizer.

M

Esqueci de dizer algo muito importante:
Ao se executar o statement.executeUpdate com o meu INSERT, é levantada uma SQLException. Mas não é por erro no SQL, pq a mesma string SQL se executada diretamente no IBExpert funciona perfeitamente.

C

Mostra o stack trace.

T

Em vez disto

use isto

}catch(SQLException ex){
           System.out.println ("--- Erro no UPDATE ---");
           ex.printStackTrace();
        }

e veja o stack trace.

Criado 8 de junho de 2005
Ultima resposta 8 de jun. de 2005
Respostas 5
Participantes 3