Erro de parametro

Está dando o seguinte erro no main: Exception in thread “main” java.sql.SQLException: Parameter index out of range (6 > number of parameters, which is 5).

import Dao.ContatoDao;
import Logica.Contato;
import java.sql.SQLException;
import java.util.List;
import javax.swing.JOptionPane;

public class Main {

public static void main(String[] args) throws SQLException { // cria exceção para usar a linha de conexao

   ContatoDao dao = new ContatoDao(); // objeto dao da classe ContatoDao do pacote Dao
   Contato c1 = new Contato(); // objeto c1

   int escolha;

   escolha =Integer.parseInt(JOptionPane.showInputDialog("Escolha o que deseja fazer: "
                                    + "\n1- Inserir dados"
                                    + "\n2- Alterar dados"
                                    + "\n3- Excluir dados"
                                    + "\n4- Sair"));

   switch (escolha){

       case 1:
                 c1.pedirGUI();
                 dao.adiciona(c1);
                 JOptionPane.showMessageDialog(null,"Dados adicionados!");
                 break;

       case 2:
                 c1.alterarGUI();
                 dao.altera(c1);
                 JOptionPane.showMessageDialog(null,"Dados alterados!");
                break;

       case 3:
                 c1.excluirGUI();
                 dao.remove(c1);
                 JOptionPane.showMessageDialog(null,"Dados removidos!");
                 break;

       case 4:
                 List<Contato> minhaLista = dao.getLista();

                    for (Contato contato : minhaLista) {
                        JOptionPane.showMessageDialog(null,"Nome: " + contato.getNome()
                            + "\nEndereço: " + contato.getEndereco()
                            + "\nTelefone: " + contato.getTelefone()
                            + "\nDt_Nasc : " + contato.getdt_nasc()
                            + "\nConta: " +contato.getConta()
                            + "\nValor: " +contato.getValor());
                    };
                    break;

       case 5:
                 List<Contato> minhaListapg = dao.getListapg();

                    for (Contato contato : minhaListapg) {
                        JOptionPane.showMessageDialog(null,"Nome: " + contato.getNome()
                           + "\nEndereço: " + contato.getEndereco()
                            + "\nTelefone: " + contato.getTelefone()
                            + "\nDt_Nasc : " + contato.getdt_nasc()
                            + "\nConta: " +contato.getConta()
                            + "\nValor: " +contato.getValor());
                    };
                 break;

       case 6:
                System.exit(0);
                break;

       default:
           JOptionPane.showMessageDialog(null,"Opção inválida");


   }

}
}

Como arrumar?

Coloca as outras classe ai, pq acho que o erro não esta ocorrendo aí nessa classe. Acho que provavelmente está ocorrendo na classe DAO

Obs: Coloque o código entre codes, facilita a visualização :smiley:

classe de conexão:

package Conexao;

import java.sql.*;
import java.sql.SQLException;

public class CriaConexao {

public static Connection getConnection() throws SQLException {
    
  
    try{
        Class.forName("com.mysql.jdbc.Driver");
     System.out.println("Conectando ao Banco");
     return DriverManager.getConnection("jdbc:mysql://localhost/cadastro","root","");
    } catch (ClassNotFoundException e) {
    throw new SQLException(e.getMessage());
    
    }
}

}

classe de contato;

package Dao;

import Conexao.CriaConexao;
import Logica.Contato;
import java.sql.*;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ContatoDao {

private Connection conexao;
private Connection conectar;

 // construtor
public ContatoDao() throws SQLException{ // cria excessao para usar bd!

   this.conexao = CriaConexao.getConnection();
   //this.conectar = Conexao.getConectar();
}



        // método para adicionar dados:

//------------------------------------------------------------------------------
public void adiciona(Contato c1) throws SQLException{ // precisa importar a classe Contato do pack lógico. c1 é o contato 1. Coloca excessao

    // prepara conexao
    String sql= "insert into contato (nome,endereco,telefone,email,sexo) values (?,?,?,?,?)";

    PreparedStatement stmt= conexao.prepareStatement(sql); // mysql

    //PreparedStatement stmtpg = conectar.prepareStatement(sql); // postgre

    //seta valores
    stmt.setString(1, c1.getNome());
    stmt.setString(2, c1.getEndereco());
    stmt.setString(3, c1.getTelefone());
    stmt.setString(4, c1.getdt_nasc());
    stmt.setString(5, c1.getConta());
    stmt.setString(6, c1.getValor());
    
    /*stmtpg.setString(1,c1.getNome());
    stmtpg.setString(2,c1.getEndereco());
    stmtpg.setString(3,c1.getTelefone());
    stmtpg.setString(4,c1.getEmail());
    stmtpg.setString(5,c1.getSexo());*/



    stmt.execute(); // executa o código sql que stmt possui
    stmt.close(); // fecha stmt

    //stmtpg.execute();
    //stmtpg.close();

}

//------------------------------------------------------------------------------

         // Método para adicionar no postgre

//------------------------------------------------------------------------------

public void adicionapg(Contato c1) throws SQLException {
    //prepara conexao
    String query = "INSERT INTO contato ("
            + "nome, "
            + "endereco, "
            + "telefone, "
            + "dt_nasc, "
            +"conta"
            + "valor)"
            + "VALUES (?,?,?,?,?)";

    /*conexao para mysql
     *
     PreparedStatement stmt = conexao.prepareStatement(query);
     */

    PreparedStatement stmt = conectar.prepareStatement(query);

    //seta os valores
    stmt.setString(1, c1.getNome());
    stmt.setString(2, c1.getEndereco());
    stmt.setString(3, c1.getTelefone());
    stmt.setString(4, c1.getdt_nasc());
    stmt.setString(5, c1.getConta());
    stmt.setString(6, c1.getValor());
    //executa o codigo sql
    stmt.execute();
    stmt.close();

}


        // Método para alterar dados:

//------------------------------------------------------------------------------
public void altera(Contato c1) throws SQLException{

    String sql= "update contato set nome=?, endereco=?, telefone=?, dat_nasc=?, conta=? where id=?";

    PreparedStatement stmt= conexao.prepareStatement(sql);

    stmt.setString(1,c1.getNome());
    stmt.setString(2,c1.getEndereco());
    stmt.setString(3,c1.getTelefone());
    stmt.setString(4,c1.getdt_nasc());
    stmt.setString(5,c1.getConta());
    stmt.setString(6,c1.getValor());
   

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

//------------------------------------------------------------------------------

        // Método para remover dados:

//------------------------------------------------------------------------------
public void remove(Contato c1) throws SQLException{

    String sql= "delete from contato where id=?";

    PreparedStatement stmt= conexao.prepareStatement(sql);

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

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

//------------------------------------------------------------------------------

        // Método para visualizar dados:

//------------------------------------------------------------------------------
public List getLista() throws SQLException{

    String sql= "select * from contato";

    PreparedStatement stmt= this.conexao.prepareStatement(sql); // stmt recebe por parametro a string sql


    ResultSet rs= stmt.executeQuery();

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

    while(rs.next()){

        Contato c1 = new Contato();

        c1.setNome(rs.getString("nome"));
        c1.setEndereco(rs.getString("endereco"));
        c1.setTelefone(rs.getString("telefone"));
        c1.setDt_nasc(rs.getString("dat_nasc"));
        c1.setConta(rs.getString("conta"));
        c1.setValor(rs.getString("valor"));  
        
        minhaLista.add(c1);
        adicionapg(c1);
    }

    rs.close();
    stmt.close();

    return minhaLista;

}

//------------------------------------------------------------------------------

  public List<Contato> getListapg() throws SQLException{

    String sql= "select * from contato";

    PreparedStatement stmtpg= this.conectar.prepareStatement(sql);

    ResultSet rs= stmtpg.executeQuery();

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

    while(rs.next()){

        Contato c1 = new Contato();

        c1.setNome(rs.getString("nome"));
        c1.setEndereco(rs.getString("endereco"));
        c1.setTelefone(rs.getString("telefone"));
        c1.setDt_nasc(rs.getString("dt_nasc"));
        c1.setConta(rs.getString("conta"));
        c1.setValor(rs.getString("valor"));  

        minhaListapg.add(c1);
    }

    rs.close();
    stmtpg.close();

    return minhaListapg;
}

}

package Logica;
import javax.swing.JOptionPane;
import Conexao.CriaConexao;
import java.sql.*;
import java.sql.SQLException;

public class Contato {

            // Declara strings que serão usadas no método get e set

//------------------------------------------------------------------------------
private Long id;
private String nome;
private String endereco;
private String telefone;
private String dt_nasc;
private String conta;
private String valor;
private Connection conexao;
//------------------------------------------------------------------------------

              // Metodos set e get:

//------------------------------------------------------------------------------
public String getdt_nasc() {
return dt_nasc;
}

public void setDt_nasc(String dt_nasc) {
    this.dt_nasc = dt_nasc;
}

public String getEndereco() {
    return endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getConta() {
    return conta;
}

public void setConta(String conta) {
    this.conta = conta;
}

public String getValor(){
    return valor;
}

public void setValor(String valor) {
    this.valor = valor;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

//------------------------------------------------------------------------------

                // Método que será chamado para inserir os dados:

//------------------------------------------------------------------------------
public void pedirGUI(){
nome = JOptionPane.showInputDialog("Nome: ");
endereco = JOptionPane.showInputDialog("Endereço: ");
telefone = JOptionPane.showInputDialog("Telefone: ");
dt_nasc = JOptionPane.showInputDialog("Dt_Nasc: ");
conta = JOptionPane.showInputDialog("Conta: ");
valor = JOptionPane.showInputDialog("Valor: ");
}
//------------------------------------------------------------------------------

                // Método que será chamado para alterar dados:

//------------------------------------------------------------------------------
public void alterarGUI() throws SQLException{
this.conexao = CriaConexao.getConnection(); // chama conexão

    id = Long.parseLong(JOptionPane.showInputDialog("Digite o Id que deseja alterar: ")); // id recebe id digitado pelo usuário

    String sql= "SELECT COUNT(id) FROM cadastro WHERE id = '"+id+"' LIMIT 1"; //comando sql que analisa se id existe e retorna 1 se verdadeiro
    PreparedStatement stmt= conexao.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    rs.next();
    int a = rs.getInt(1); // variável a recebe o valor 1 ou 0, 1 verdadeiro; 0 falso

    // condição onde, caso a for maior que 0, ou seja, igual a 1, entra para usuário digitar informações
    if(a > 0){

         nome =      JOptionPane.showInputDialog("Nome: ");
         endereco =  JOptionPane.showInputDialog("Endereço: ");
         telefone =  JOptionPane.showInputDialog("Telefone: ");
         dt_nasc =     JOptionPane.showInputDialog("Dt_Nasc: ");
         conta =      JOptionPane.showInputDialog("Conta: ");
         valor =      JOptionPane.showInputDialog("Valor: ");
    
    }
    else{
            JOptionPane.showMessageDialog(null, "ID inexistente!");
    }
}

//------------------------------------------------------------------------------

        // Método que será chamado para usuário excluir um dado:

//------------------------------------------------------------------------------
public void excluirGUI() throws SQLException{
this.conexao = CriaConexao.getConnection(); // chama conexão

    id = Long.parseLong(JOptionPane.showInputDialog("Digite o Id que deseja alterar: ")); // id recebe id digitado pelo usuário

    String sql= "SELECT COUNT(id) FROM  WHERE id = '"+id+"' LIMIT 1"; //comando sql que analisa se id existe e retorna 1 se verdadeiro
    PreparedStatement stmt= conexao.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    rs.next();
    int a = rs.getInt(1); // variável a recebe o valor 1 ou 0, 1 verdadeiro; 0 falso

    // condição onde, caso a for maior que 0, ou seja, igual a 1, entra para usuário digitar informações
    if(a > 0)
        id = Long.parseLong(JOptionPane.showInputDialog("Digite o Id que deseja excluir: "));
    else
        JOptionPane.showMessageDialog(null,"ID inexistente!");
}

//------------------------------------------------------------------------------

coloque o código entre as tags code, assim fica impossível de ler

public void adiciona(Contato c1) throws SQLException{ // precisa importar a classe Contato do pack lógico. c1 é o contato 1. Coloca excessao

// prepara conexao
String sql= "insert into contato (nome,endereco,telefone,email,sexo) values (?,?,?,?,?)";

PreparedStatement stmt= conexao.prepareStatement(sql); // mysql

//PreparedStatement stmtpg = conectar.prepareStatement(sql); // postgre

//seta valores
stmt.setString(1, c1.getNome());
stmt.setString(2, c1.getEndereco());
stmt.setString(3, c1.getTelefone());
stmt.setString(4, c1.getdt_nasc());
stmt.setString(5, c1.getConta());
stmt.setString(6, c1.getValor());

/*stmtpg.setString(1,c1.getNome());
stmtpg.setString(2,c1.getEndereco());
stmtpg.setString(3,c1.getTelefone());
stmtpg.setString(4,c1.getEmail());
stmtpg.setString(5,c1.getSexo());*/

Cara seu código ta meio bagunçado…tem muito comentário…Coloca os códigos entre “code” ai facilita a visualização.
Nesse codigo ai acima vc faz sql passando as colunas nome, endereço, telefone, email, sexo…só que na hora de inserir vc passa outros argumento como getDt_Nasc, etc

agora aparece esse erro: Exception in thread “main” java.sql.SQLException: Data truncated for column ‘valor’ at row 1

public void altera(Contato c1) throws SQLException{

String sql= "update contato set nome=?, endereco=?, telefone=?, dat_nasc=?, conta=? where id=?";

PreparedStatement stmt= conexao.prepareStatement(sql);

stmt.setString(1,c1.getNome());
stmt.setString(2,c1.getEndereco());
stmt.setString(3,c1.getTelefone());
stmt.setString(4,c1.getdt_nasc());
stmt.setString(5,c1.getConta());
stmt.setString(6,c1.getValor());


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

na query não tem a coluna valor para o argumento stmt.setString(6,c1.getValor());

Cara,

segue o que o nosso amigo acima explicou, mas acho que no seu banco vc deve ter configurado a DT_nasc como Date, use o que está abaixo para enviar a informação para a data

stmt.setDate(4, new java.sql.Date(c1.getdt_nasc()).getTime);