Alguém sabe onde está meu erro?

Classe Main:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package controle;

import dao.ContatoDao;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import junior.banco.criaConexao;
import logica.Contato;

/**
*

  • @author Andre
    */
    public class Main {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) throws SQLException {
      // TODO code application logic here
      Contato contato = new Contato();

    contato.setId(Long.valueOf(3));
    contato.setNome(“Tiao”);
    contato.setRaca(“Vira lata”);
    contato.setSexo(“Macho”);
    contato.setVacinado(“Nao”);
    ContatoDao dao = new ContatoDao();
    dao.altera(contato);

    }

}[/code]

Classe ContatoDao:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import junior.banco.criaConexao;
import logica.Contato;

/**
 *
 * @author Andre
 */
public class ContatoDao {

    private Connection conexao;

    public ContatoDao() throws SQLException{
        this.conexao = criaConexao.getConexao();

    }

    public void adiciona(Contato c1) throws SQLException{
        //Prepara conexao
        String sql = "insert into boi (nome, raca, sexo, vacinado)"+
                "values (?,?,?,?)";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        //Seta os valores
        stmt.setString(1, c1.getNome());
        stmt.setString(2, c1.getRaca());
        stmt.setString(3, c1.getSexo());
        stmt.setString(4, c1.getVacinado());

        //Executa o código SQK
        stmt.execute();
        stmt.close();
    }

    public List<Contato> getLista() throws SQLException{
        String sql = "select * from boi";
        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        List<Contato> minhaLista = new ArrayList<Contato>();

        while(rs.next()){
            Contato c1 = new Contato();
            c1.setNome(rs.getString("nome"));
            c1.setRaca(rs.getString("raca"));
            c1.setSexo(rs.getString("sexo"));
            c1.setVacinado(rs.getString("vacinado"));
            minhaLista.add(c1);
        }

        rs.close();
        stmt.close();
        return minhaLista;

        }

      public void altera(Contato c1) throws SQLException{
          String sql = "update boi set nome=?, raca=?"+
          "sexo=?, vacinado=? where id=?";
          PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setString(1, c1.getNome());
        stmt.setString(2, c1.getRaca());
        stmt.setString(3, c1.getSexo());
        stmt.setString(4, c1.getVacinado());
        stmt.setLong(0, c1.getId());

        stmt.execute();
        stmt.close();

      }

    }

O erro é:

[quote]run:
Conexao feita com sucesso!
Exception in thread “main” java.sql.SQLException: Parameter index out of range (0 < 1 ).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3283)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3314)
at com.mysql.jdbc.PreparedStatement.setLong(PreparedStatement.java:3330)
at dao.ContatoDao.altera(ContatoDao.java:78)
at controle.Main.main(Main.java:34)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)[/quote]

Informações:

Banco de dados: vacina
Tabela: boi

Se alguém puder ajudar, eu ficaria agradecido. Obrigado.

você quer realmente alterar, ou quer adicionar?

Oi, eu quero alterar. Eu só não entendi o porque do erro, pois no NetBeans não há nenhuma linha em vermelho…

o erro ta aqui:

stmt.setLong(0, c1.getId());  

ti pergunto pq zero?

[quote=LPJava]o erro ta aqui:

stmt.setLong(0, c1.getId());  

ti pergunto pq zero? [/quote]

Alterei para 5:

stmt.setLong(5, c1.getId());  

Porém o erro persiste…

Vocês sabem o que pode ser ?

Obrigado pelas respostas.

o log do erro é o mesmo?

Acho que sim…

[quote]run:
Conexao feita com sucesso!
Exception in thread “main” com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘sexo=‘Macho’, vacinado=‘Nao’ where id=3’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:995)
at dao.ContatoDao.altera(ContatoDao.java:80)
at controle.Main.main(Main.java:34)
Java Result: 1[/quote]

Obrigado pela resposta.

o problema está na sua sintaxe do sql. eu ja passei por isso, para ter a sintaxe correta eu primeiro executava o que eu queria no sql prompt e depois pegava aquele code e jogava no meu code java, assim evitava estes erros, claro que nao era copy/paste, mas a logica da coisa.

Entao revise ai sua sintaxe sql, como o log está pedindo.

[quote=LPJava]o problema está na sua sintaxe do sql. eu ja passei por isso, para ter a sintaxe correta eu primeiro executava o que eu queria no sql prompt e depois pegava aquele code e jogava no meu code java, assim evitava estes erros, claro que nao era copy/paste, mas a logica da coisa.

Entao revise ai sua sintaxe sql, como o log está pedindo.
[/quote]

Pensei nisso mesmo, pois o NetBeans não deixava nenhuma linha vermelha…

Muito obrigado pelo auxilio.

[quote=juniorlinux][quote=LPJava]o problema está na sua sintaxe do sql. eu ja passei por isso, para ter a sintaxe correta eu primeiro executava o que eu queria no sql prompt e depois pegava aquele code e jogava no meu code java, assim evitava estes erros, claro que nao era copy/paste, mas a logica da coisa.

Entao revise ai sua sintaxe sql, como o log está pedindo.
[/quote]

Pensei nisso mesmo, pois o NetBeans não deixava nenhuma linha vermelha…

Muito obrigado pelo auxilio.[/quote]

eh, nem sempre a ide ajuda ne? hehe. :D.

faz um teste com:

stmt.executeUpdate();

ao invés de stmt.execute();

[quote=manolimars]faz um teste com:

[code]
stmt.executeUpdate();

ao invés de stmt.execute();
[/code][/quote]

Amigo, a saída foi o erro:

[quote]run:
Conexao feita com sucesso!
Exception in thread “main” com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘sexo=‘Macho’, vacinado=‘Nao’ where id=3’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
at dao.ContatoDao.altera(ContatoDao.java:80)
at controle.Main.main(Main.java:34)
Java Result: 1[/quote]

Obrigado pela resposta.

up

Ta faltando uma virgula e um espaco entre sexo e raça :slight_smile:
Seu sql ta ficando assim : “update boi set nome=?, raca=?sexo=?, vacinado=? where id=?”
deveria ficar assim: “update boi set nome=?, raca=?, sexo=?, vacinado=? where id=?”

Ok?

[quote=plinioj]Ta faltando uma virgula e um espaco entre sexo e raça :slight_smile:
Seu sql ta ficando assim : “update boi set nome=?, raca=?sexo=?, vacinado=? where id=?”
deveria ficar assim: “update boi set nome=?, raca=?, sexo=?, vacinado=? where id=?”

Ok?
[/quote]

Amigão! É verdade, eu havia me esquecido de uma vírgula :slight_smile:

Compilei, mas continuo com erro:

[quote]run:
Conexao feita com sucesso!
Exception in thread “main” java.sql.SQLException: Parameter index out of range (0 < 1 ).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3283)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3314)
at com.mysql.jdbc.PreparedStatement.setLong(PreparedStatement.java:3330)
at dao.ContatoDao.altera(ContatoDao.java:77)
at controle.Main.main(Main.java:34)
Java Result: 1[/quote]

Sabe o que pode ser ?

Muito obrigado pela resposta.

Em primeiro lugar, experimente colocar toda string referente ao comando sql em apenas uma linha pra ficar mais fácil de você mesmo encontrar o erro.

obs: depois q vc corrigir, ai tu volta a quebrar as strings em varias linhas, mas com mais cuidado :wink:

[quote=Thiago Senna]Em primeiro lugar, experimente colocar toda string referente ao comando sql em apenas uma linha pra ficar mais fácil de você mesmo encontrar o erro.

obs: depois q vc corrigir, ai tu volta a quebrar as strings em varias linhas, mas com mais cuidado ;)[/quote]

Comecei a fazer isso amigo, mas não encontro nada errado :frowning:

O erro é com o SQL mesmo…

Ta brabo :S

Obrigado pela resposta.

copie o sql e execute direto no seu cliente de banco de dados para achar o erro. Depois copie-os de volta. Vc está provavelmente comandos que deveriam estar separados. Aparentemente nao tem erro no seu SQL, entao o jeito é testar direto no banco. Ou, deleta tudo e começa denovo :stuck_out_tongue:

Prefiro a primeira opção : p

Vou fazer como dito por você, hoje eu nem durmo por causa desse programa, não quero ter que passar o domingo programando :frowning:

O pior é que a vaga de emprego depende desse programa :frowning:

Obrigado!

a sugestão de deletar e fazer de novo as vezes parece absurda, mas funciona. É mais fácil recomeçar e fazer certo do que concertar, as vezes. Enfim, no pior dos casos, tente descansar um pouco, e depois volte a fazer.