2
I am building a Java system with connection to Mysql database, but I stopped at a certain point because I can’t locate the error. My update method happens an error in Junit, but I can’t figure out what it is.
Follows parts of the code:
package com.sistemacliente.DAO;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.sistemacliente.domain.Balada;
import com.sistemacliente.domain.Cliente;
import com.sistemacliente.factory.ConexaoFactory;
public class ClienteDAO {
    public void salvar(Cliente c) throws SQLException {
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO cliente");
        sql.append("(nome,sobrenome,telefone,email,data,valor,baladas_codigo)");
        sql.append("VALUES (?,?,?,?,?,?,?)");
        Connection conexao = ConexaoFactory.conectar();
        PreparedStatement comando = conexao.prepareStatement(sql.toString());
        comando.setString(1, c.getNome());
        comando.setString(2, c.getSobrenome());
        comando.setInt(3, c.getTelefone());
        comando.setString(4, c.getEmail());
        comando.setDate(5, c.getData());
        comando.setDouble(6, c.getValor());
        comando.setInt(7, c.getBalada().getCodigo());
        comando.executeUpdate();
    }
    public ArrayList<Cliente> listar() throws SQLException {
        StringBuilder sql = new StringBuilder();
        sql.append(
                "SELECT c.codigo, c.nome, c.sobrenome, c.telefone, c.email, c.data, c.valor, b.codigo, b.descricao ");
        sql.append("FROM cliente c   ");
        sql.append("INNER JOIN balada b ON b.codigo = c.baladas_codigo");
        Connection conexao = ConexaoFactory.conectar();
        PreparedStatement comando = conexao.prepareStatement(sql.toString());
        ResultSet resultado = comando.executeQuery();
        ArrayList<Cliente> lista = new ArrayList<Cliente>();
        while (resultado.next()) {
            Balada b = new Balada();
            b.setCodigo(resultado.getInt("b.codigo"));
            b.setDescricao(resultado.getString("b.descricao"));
            Cliente c = new Cliente();
            c.setCodigo(resultado.getInt("c.codigo"));
            c.setNome(resultado.getString("c.nome"));
            c.setSobrenome(resultado.getString("c.sobrenome"));
            c.setTelefone(resultado.getInt("c.telefone"));
            c.setEmail(resultado.getString("c.email"));
            c.setData(resultado.getDate("c.data"));
            c.setValor(resultado.getDouble("c.valor"));
            c.setBalada(b);
            lista.add(c);
        }
        return lista;
    }
    public void excluir(Cliente c) throws SQLException {
        StringBuilder sql = new StringBuilder();
        sql.append("DELETE FROM cliente ");
        sql.append("WHERE codigo = ?");
        Connection conexao = ConexaoFactory.conectar();
        PreparedStatement comando = conexao.prepareStatement(sql.toString());
        comando.setInt(1, c.getCodigo());
        comando.executeUpdate();
    } 
    public void atualizar(Cliente c) throws SQLException {
        StringBuilder sql = new StringBuilder();
        sql.append("UPDATE cliente");
        sql.append("SET codigo = ? , nome = ? , sobrenome = ? , telefone = ? ,"
                + " email = ? ,  data = ? , valor = ? , baladas_codigo = ? ");
        sql.append("WHERE codigo =  ? ");
        Connection conexao = ConexaoFactory.conectar();
        PreparedStatement comando = conexao.prepareStatement(sql.toString());
        comando.setString(1, c.getNome());
        comando.setString(2, c.getSobrenome());
        comando.setInt(3, c.getTelefone());
        comando.setString(4, c.getEmail());
        comando.setDate(5, c.getData());
        comando.setDouble(6, c.getValor());
        comando.setInt(7, c.getCodigo());
        comando.executeUpdate();
    } 
}
And here’s Junit’s part:
    @Test
    public void atualizar() throws SQLException {
        Cliente c = new Cliente();
        c.setCodigo(7);
        c.setNome("Koppa");
        c.setSobrenome("Troppa");
        c.setTelefone(11111);
        c.setEmail("[email protected]");
        c.setData(new Date(2016/07/10));
        c.setValor(5.00);
        Balada b = new Balada();
        b.setCodigo(14);
        c.setBalada(b);
        ClienteDAO dao = new ClienteDAO();
        dao.atualizar(c);
    }
}
Here is the error generated:
java.sql.Sqlexception: No value specified for Parameter 8
Screenshot of the error:

Not to mention that it is unnecessary to create a Stringbuilder to build the query and then convert to String. Easier to perform a direct string query
– user28595
Then... It would be even simpler and readable
– LocalHost