/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagecontrole;importdao.ContatoDao;importjava.sql.Connection;importjava.sql.SQLException;importjava.util.List;importjunior.banco.criaConexao;importlogica.Contato;/** * * @author Andre */publicclassMain{/** * @param args the command line arguments */publicstaticvoidmain(String[]args)throwsSQLException{// TODO code application logic hereContatocontato=newContato();contato.setId(Long.valueOf(3));contato.setNome("Tiao");contato.setRaca("Vira lata");contato.setSexo("Macho");contato.setVacinado("Nao");ContatoDaodao=newContatoDao();dao.altera(contato);}}
Classe ContatoDao:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagedao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importjunior.banco.criaConexao;importlogica.Contato;/** * * @author Andre */publicclassContatoDao{privateConnectionconexao;publicContatoDao()throwsSQLException{this.conexao=criaConexao.getConexao();}publicvoidadiciona(Contatoc1)throwsSQLException{//Prepara conexaoStringsql="insert into boi (nome, raca, sexo, vacinado)"+"values (?,?,?,?)";PreparedStatementstmt=conexao.prepareStatement(sql);//Seta os valoresstmt.setString(1,c1.getNome());stmt.setString(2,c1.getRaca());stmt.setString(3,c1.getSexo());stmt.setString(4,c1.getVacinado());//Executa o código SQKstmt.execute();stmt.close();}publicList<Contato>getLista()throwsSQLException{Stringsql="select * from boi";PreparedStatementstmt=this.conexao.prepareStatement(sql);ResultSetrs=stmt.executeQuery();List<Contato>minhaLista=newArrayList<Contato>();while(rs.next()){Contatoc1=newContato();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();returnminhaLista;}publicvoidaltera(Contatoc1)throwsSQLException{Stringsql="update boi set nome=?, raca=?"+"sexo=?, vacinado=? where id=?";PreparedStatementstmt=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 é:
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)
Informações:
Banco de dados: vacina
Tabela: boi
Se alguém puder ajudar, eu ficaria agradecido. Obrigado.
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.
Andre_Rosa
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.
Pensei nisso mesmo, pois o NetBeans não deixava nenhuma linha vermelha…
Muito obrigado pelo auxilio.
LPJava
juniorlinux:
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.
Pensei nisso mesmo, pois o NetBeans não deixava nenhuma linha vermelha…
Muito obrigado pelo auxilio.
eh, nem sempre a ide ajuda ne? hehe. :D.
manolimars
faz um teste com:
stmt.executeUpdate();aoinvésdestmt.execute();
Andre_Rosa
manolimars:
faz um teste com:
stmt.executeUpdate();
ao invés de stmt.execute();
Amigo, a saída foi o erro:
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
Obrigado pela resposta.
Andre_Rosa
up
P
plinioj
Ta faltando uma virgula e um espaco entre sexo e raça
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?
Andre_Rosa
plinioj:
Ta faltando uma virgula e um espaco entre sexo e raça
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?
Amigão! É verdade, eu havia me esquecido de uma vírgula
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
Andre_Rosa
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 ;)
Comecei a fazer isso amigo, mas não encontro nada errado
O erro é com o SQL mesmo…
Ta brabo :S
Obrigado pela resposta.
Thiago_Senna
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
Andre_Rosa
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
O pior é que a vaga de emprego depende desse programa
Obrigado!
Thiago_Senna
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.
R
raghy
e ai conseguiram resolver. vou tentar testar aqui. index out of range ???
algo esta fora dos valores corretos.
para fazer este banco da trabalho, tens o create table.
?
é só digitar show create table boi, é isto? boi ?
nao adianta saber a tabela, e o banco, muito sem isso.
ViniGodoy
Novamente reclamou de um parâmetro com índice 0. Os parâmetros do preparedstatement começam no índice 1.
O erro está na linha 77 da classe ContatoDao (é bom ler direitinho o erro da SQL, ele diz exatamente qual é o problema).