@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.
[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]
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…
[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…
[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]
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=?”
[quote=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?
[/quote]
Amigão! É verdade, eu havia me esquecido de uma vírgula
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]
[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
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
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.