[CODE]Column count doesn't match value count at row 1

Galera estou com este erro na hora que executo uma inserção de dados na minha tabela. Sei que é um erro que mostra que a quantidade de valores que eu quero inserir não bate com o números de colunas do meu MySQL, mas não consigo encontrar meu erro e muito menos conserta-lo.

AlunosDAO:
package controller;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import model.Aluno;

public class AlunoDAO {

private Connection con;
private PreparedStatement cmd;

public AlunoDAO() {
    this.con = Conexao.conectar();
}

public int inserir(Aluno aluno) {
    try {
        final String SQL = "insert into aluno ( codigo, curso, nome, tel, rua, numero"
                + "cep, bairro, cidade,estado) values (?,?,?,?,?,?,?,?,?,?) ";
        cmd = con.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
        cmd.setInt(1, aluno.getCodigo());
        cmd.setString(2, aluno.getCurso());
        cmd.setString(3, aluno.getNome());
        cmd.setInt(4, aluno.getTel());
        cmd.setString(5, aluno.getRua());
        cmd.setInt(6, aluno.getNumero());
        cmd.setInt(7, aluno.getCep());
        cmd.setString(8, aluno.getBairro());
        cmd.setString(9, aluno.getCidade());
        cmd.setString(10, aluno.getEstado());
        
        
        if (cmd.executeUpdate() > 0) {
            ResultSet rs = cmd.getGeneratedKeys();
            if (rs.next()) {
                return rs.getInt(1);
            }
        }
        return -1;
    } catch (SQLException e) {
        System.out.println("ERRO: " + e.getMessage());
        return -1;
    } finally {
        Conexao.desconectar(con);
    }
}

}

Inserção:

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {

    if (txtNome.getText().isEmpty() || txtCodigo.getText().isEmpty() || txtCurso.getText().isEmpty() ||
            txtTel.getText().isEmpty()|| txtRua.getText().isEmpty() || txtNumero.getText().isEmpty() || txtCep.getText().isEmpty()

            || txtBairro.getText().isEmpty() || txtCidade.getText().isEmpty()) {
        JOptionPane.showMessageDialog(null,
                "O campo nome precisa ser preenchido.",
                "Cadastro de Aluno",
                JOptionPane.WARNING_MESSAGE);
        txtNome.requestFocus();
    } else {
        Aluno adda = new Aluno();
        adda.setCodigo(Integer.parseInt(txtCodigo.getText()));
        adda.setCurso(txtCurso.getText());
        adda.setNome(txtNome.getText());
        adda.setTel(Integer.parseInt(txtTel.getText()));
        adda.setRua(txtRua.getText());
        adda.setNumero(Integer.parseInt(txtNumero.getText()));
        adda.setCep(Integer.parseInt(txtCep.getText()));
        adda.setBairro(txtBairro.getText());
        adda.setCidade(txtCidade.getText());
        adda.setEstado(txtEstado.getText());
        
        
        
        
        
        
        
        int res = -1;
        if (txtId.getText().isEmpty()) {
            res = new AlunoDAO().inserir(adda);
        } else {
            adda.setCodigo(Integer.parseInt(txtId.getText()));
           // res = new AlunoDAO().atualizar(adda);
        }
        if (res != -1) {
            txtId.setText(Integer.toString(res));
            JOptionPane.showMessageDialog(null,
                    "Operação realizada com sucesso.",
                    "Livraria do João",
                    JOptionPane.INFORMATION_MESSAGE);
        }else{
            JOptionPane.showMessageDialog(null,
                    "Não foi possível realizar a operação.",
                    "Livraria do João",
                    JOptionPane.ERROR_MESSAGE);
        }
}                        
}             

MySQL:
drop database if exists db_livraria;
drop database if exists db_portaria;
create database db_portaria;
use db_portaria;

drop table if exists alunos;
drop table if exists docentes;
drop table if exists funcionarios;
drop table if exists encomendas;
drop table if exists cursos;

create table aluno(

id int,
codigo int,
curso varchar(30),
nome varchar(40),
telefone varchar(15),
rua varchar(30),
numero int,
cep int,
bairro varchar(15),
cidade varchar(20),
estado varchar(2),

primary key(codigo)

);

create table docente(

codigo int,
nome varchar(40),
rua varchar(30),
bairro varchar(15),
estado varchar(2),
telefone varchar(15),
numero int,
cep int,
complemento varchar(20),
formacao varchar(30),

primary key(codigo)

);

create table funcionarios(

codigo int,
nome varchar(40),
rua varchar(30),
bairro varchar(15),
estado varchar(2),
telefone varchar(15),
numero int,
cep int,
complemento varchar(20),
funcao varchar(30),

primary key(codigo)

);

create table visitas(

cpf int,
nome varchar(40),

primary key(cpf)

);

create table encomenda(

codigor int,
nomef varchar(40),
primary key (codigor)

);

Se cometi algum erro ao criar o tópico me desculpem, sou novo aqui!

Seu insert está assim:

insert into aluno (codigo, curso, nome, tel, rua, numerocep, bairro, cidade, estado) values (?,?,?,?,?,?,?,?,?,?)

Mas deveria ser assim:

insert into aluno (codigo, curso, nome, tel, rua, numero, cep, bairro, cidade, estado) values (?,?,?,?,?,?,?,?,?,?)

Obrigado staroski funcionou perfeitamente, fui bem displicente com essa vingula