Erro teste cadastrar

17 respostas
K

Caro colegas,

Tenho essa classe TesteCadastrar:
package test;

import dao.AlunoDAO;
import model.Aluno;

public class TesteCadastrar 
{
    public static void main (String[] args ) throws Exception
    {
        Aluno a = new Aluno();
        
        a.setNome("kildare gomes");
        a.setCpf("96969");
        a.setRg("123MG");
        a.setSexo("M");
        a.setDtnasc(new java.sql.Date(System.currentTimeMillis())); //pega a data atual
        a.setPai("MEU PAI");
        a.setMae("MINHA MAE");
        a.setEndereco("RUA MEUS FILHOS");
        a.setBairro("BALEIA");
        a.setCidade("MARO");
        a.setUf("MG");
        a.setCep("123111");
        a.setTelefone(96631);
        a.setEmail("eee@eee");
        a.setDtCad(new java.sql.Date(System.currentTimeMillis()));
        
        AlunoDAO dao = new AlunoDAO();
        dao.cadastrar(a);
        
        System.out.print("Aluno " + a.getNome()+ "cadastrado com sucesso!");
    }
Classe Aluno
package model;

import java.sql.Date;

public class Aluno 
{
    private int idAluno;
    private String nome;
    private String cpf;
    private String rg;
    private Date dtnasc;
    private String sexo;
    private String pai;
    private String mae;
    private String endereco;
    private String bairro;
    private String cidade;
    private String uf;
    private String cep;
    private String email;
    private Long telefone;
    private Date dtCad;
    
    public int getIdAluno()
    {
        return idAluno;
    }
    public void setIdAluno(int idAluno)
    {
        this.idAluno = idAluno; 
    }
    public String getNome()
    {
        return nome;
    }
    public void setNome(String nome)
    {
        this.nome = nome;
    }
    public String getCpf()
    {
        return cpf;
    }
    public void setCpf(String cpf)
    {
        this.cpf = cpf;
    }
    public String getRg()
    {
        return rg;
    }
    public void setRg(String rg)
    {
        this.rg = rg;
    }
    public String getSexo()
    {
        return sexo;
    }
    public void setSexo(String sexo)
    {
        this.sexo = sexo;
    }
    public Date getDtnasc()
    {
        return dtnasc;
    }
    public void setDtnasc(Date dtnasc)
    {
        this.dtnasc = dtnasc;
    }
    public String getEndereco()
    {
        return endereco;
    }
    public String getPai()
    {
        return pai;
    }
    public void setPai(String pai)
    {
        this.pai = pai;
    }
    public String getMae()
    {
        return mae;
    }
    public void setMae(String mae)
    {
        this.mae = mae;
    }  
    public void setEndereco(String endereco)
    {
        this.endereco = endereco;
    }
    public String getBairro()
    {
        return bairro;
    }
    public void setBairro(String bairro)
    {
        this.bairro = bairro;
    }
    public String getCidade()
    {
        return cidade;
    }
    public void setCidade (String cidade)
    {
        this.cidade = cidade;
    }
    public String getUf()
    {
        return uf;
    }
    public void setUf(String uf)
    {
        this.uf = uf;
    }
    public String getCep()
    {
        return cep;
    }
    public void setCep(String cep)
    {
        this.cep = cep;
    }
    public Long getTelefone()
    {
        return telefone;
    }
    public void setTelefone(long telefone)
    {
        this.telefone = telefone;
    }
    public String getEmail()
    {
        return email;
    }
    public void setEmail(String email)
    {
        this.email = email;
    }
    public Date getDtCad()
    {
        return dtCad;
    }
    public void setDtCad(Date dtCad)
    {
        this.dtCad = dtCad;
    }
}
Classe AlunoDAO
package dao;

import java.util.ArrayList;
import java.util.List;
import model.Aluno;
import conexao.ConnectionMySql;

public class AlunoDAO extends ConnectionMySql
{ 
    public void cadastrar(Aluno a) throws Exception
    {
        OpenDatabase();
        
        SQL =  "INSERT INTO tb_aluno (idAluno, "
                                      + "nome,"
                                      + "cpf, "
                                      + "rg,"
                                      + "sexo,"
                                      + "dtnas,"
                                      + "pai,"
                                      + "mae,"
                                      + "telefone,"
                                      + "email,"
                                      + "endereco,"
                                      + "bairro,"
                                      + "cidade,"
                                      + "uf,"
                                      + "cep,"
                                      + "dtCad)"
                                      + "value(null,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        
        ps = con.prepareStatement(SQL);
        
        ps.setString(1,  a.getNome());
        ps.setString(2,  a.getCpf());
        ps.setString(3,  a.getRg());
        ps.setString(4,  a.getSexo());
        ps.setDate  (5,  a.getDtnasc());
        ps.setString(6,  a.getPai());
        ps.setString(7,  a.getMae());
        ps.setLong  (8,  a.getTelefone());
        ps.setString(9,  a.getEmail());
        ps.setString(10, a.getEndereco());
        ps.setString(11, a.getBairro());
        ps.setString(12, a.getCidade());
        ps.setString(13, a.getUf());
        ps.setString(14, a.getCep());
        ps.setDate  (15, a.getDtCad());

        ps.execute();
        
        CloseDatabase();
    }

Quando mando executar a classe TesteCadastrar, aparece a seguinte mensagem de erro:

1 - at dao.AlunoDAO.cadastrar(AlunoDAO.java:50)
2 - at test.TesteCadastrar.main(TesteCadastrar.java:29)

Já revisei e não consegui localizar o erro. Será que alguém poderia me ajudar a solucionar o erro.?
Agradeço a todos pela ajuda.

Kildare

17 Respostas

pmlm

E QUAL é a mensagem de erro?

di.magdaleno

Coloca a Stack completa do erro. Você não postou qual é o erro em si.

Onde que está declarado o seu PreparedStatement?

Fexx

di.magdaleno:
Coloca a Stack completa do erro. Você não postou qual é o erro em si.

Onde que está declarado o seu PreparedStatement?

Verdade posta todo.

Lembrando que se o campo idAluno no banco estiver como auto incremento, vc nao precisa inserir em seu preparedStatement, outra coisa, cuidado com a clausula o values, vc escreveu “value” o certo nao seria “values” no plural ?
Você, também colocou junto, se vc imprimir essa query o values sairá: assim )values(, então de espaços no values ficando assim: ) values (

Boa sorte.

Abraços.

Fica com DEUS.

K

Colegas,

segue abaixo o erro, depois de algumas orientações.

Exception in thread "main" java.sql.SQLException: Column count doesn't match value count at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
	at dao.AlunoDAO.cadastrar(AlunoDAO.java:49)
	at test.TesteCadastrar.main(TesteCadastrar.java:30)
Java Result: 1
Esta é a classe de conexão, onde é informado o PreparedStatement.
package conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class ConnectionMySql 
{
    public Connection con;
    public PreparedStatement ps;
    public ResultSet rs;
    public String SQL;

    public void OpenDatabase()throws Exception
    {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/gestao"; //nome do banco de dados
        String user = "root";  //Seu nome de usuário.
        String password = "";  //Sua senha, nesse caso o Banco esta sem senha.
        con = DriverManager.getConnection(url, user, password);
    }

    public void CloseDatabase() throws Exception
    {
        if(con != null)
        {
            con.close();
        }
    }    
}

Mais uma vez agradeço.
Kildare

Fexx

No insert tira o campo idAluno, e o null do values e tenta executar.

K

Já tirei, mas o erro infelizmente continua…

Fexx

Essa tabela, o id dela no caso o idAluno é auto incremento ou vc insere o valor dela manualmente? o nome é o mesmo que está no banco de dados?
Mostra como está o seu banco?

K

Colega,
segue o script do banco
Banco de Dados: gestao

Estrutura da tabela

`tb_aluno` (`idAluno` int(8) NOT NULL AUTO_INCREMENT, `nome` varchar(100) NOT NULL, `cpf` int(15) DEFAULT NULL, 'rg` int(20) DEFAULT NULL, `sexo` varchar(1) NOT NULL, `dtnas` date NOT NULL, `pai` varchar(20) NOT NULL, `mae` varchar(20) NOT NULL, `telefone` longtext NOT NULL, `email` varchar(20) NOT NULL, `endereco` varchar(50) NOT NULL, `bairro` varchar(20) NOT NULL, `cidade` varchar(20) NOT NULL, `uf` varchar(2) NOT NULL, `cep` int(8) NOT NULL, `dtCad` date NOT NULL, PRIMARY KEY (`idAluno`) )

Fexx

kildare:
Colega,
segue o script do banco
Banco de Dados: gestao

Estrutura da tabela

`tb_aluno` (`idAluno` int(8) NOT NULL AUTO_INCREMENT, `nome` varchar(100) NOT NULL, `cpf` int(15) DEFAULT NULL, 'rg` int(20) DEFAULT NULL, `sexo` varchar(1) NOT NULL, `dtnas` date NOT NULL, `pai` varchar(20) NOT NULL, `mae` varchar(20) NOT NULL, `telefone` longtext NOT NULL, `email` varchar(20) NOT NULL, `endereco` varchar(50) NOT NULL, `bairro` varchar(20) NOT NULL, `cidade` varchar(20) NOT NULL, `uf` varchar(2) NOT NULL, `cep` int(8) NOT NULL, `dtCad` date NOT NULL, PRIMARY KEY (`idAluno`) )

Muito estranho cara, depois que vc tirou o idAluno e o null, como ficou?
Pode postar?

pmlm

Tirar o idAluno e o null ou manter é a mesma coisa. Mudaste o VALUE para VALUES como indicaram acima?

DavidUser

realmente estralho já que o erro indica que a quantidade de colunas não confere com a quantidade de valores, verifique se o código que postou é realmente este.

Fexx

Como ele pode setar um id como null se é auto_increment?
talvez quando ele tirou esses valores poderia ter ficado as virgulas “,” nisso o PreparedStatement pensa que as colunas está erradas.

K

segue o erro abaixo:

Exception in thread "main" java.sql.SQLException: Data truncated for column 'rg' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379) at dao.AlunoDAO.cadastrar(AlunoDAO.java:49) at test.TesteCadastrar.main(TesteCadastrar.java:29) Java Result: 1

O estranho é que o erro direciona para o AlunoDAO, no ps.execute() e para dao.cadastrar(a)

Fexx

Olha como está sendo enviado para o banco:

ps.setString(3,  a.getRg());

Ele está mandando o rg como String e no banco está como int
Erro de tipos de dados diferentes.

DavidUser

rg é um campo Integer na tabela do DB e vc está usando o método setString

K

:smiley: :smiley: :smiley:
Meu amigo, MUITO OBRIGADO, era esse o erro…troquei no banco de int para varchar.

Agradeço também a todos pelas informações, elas foram muito utéis.

Abraços a todos.

pmlm

Como ele pode setar um id como null se é auto_increment?
talvez quando ele tirou esses valores poderia ter ficado as virgulas “,” nisso o PreparedStatement pensa que as colunas está erradas.

Não setar ou setar um autoincrement como null é a mesma coisa.

Criado 20 de abril de 2013
Ultima resposta 20 de abr. de 2013
Respostas 17
Participantes 5