Dificuldades em gravar informações no mysql

Boa Tarde galera tudo bem?

Estou eu aqui novamente com outra dificuldade.

Estou começando a criar interações de java com Mysql, criei um cadastro basico.
Nome, Endereço e Cpf.
minha table criei IdCodigo incremento e sendo a primary key. consigo gravar e consultar tudo certinho.

mas ai vem o problema, quando deixo um campo em branco, mesmo assim ele grava em meu banco, mas eu criei com NOT NULL, e não consigo achar nada como resolver isso.

segue meu codigo.

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        
        Connection con;
        
        con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/aula2", "root", "");
        
        String query = "INSERT INTO cliente (nome, endereco, cpf) VALUES(?,?,?)";
        
        PreparedStatement stmt = con.prepareStatement(query);
        
        stmt.setString(1, jTextFieldNome.getText());
        stmt.setString(2, jTextFieldEndereco.getText());
        stmt.setString(3, jTextFieldCpf.getText());
        
        stmt.executeUpdate();
        
        stmt.close();
        con.close();
        
    } catch (ClassNotFoundException ex) {
        System.out.println("Classe não encontrada");
    } catch (SQLException e) {
        System.out.println("Ocorreu erro de SQL");
    }
    
    
}

acho que quando tu insere um valor " " ele interpreta como se não fosse nulo.
Tenta por a condição de estar vazio dentro do próprio get do campo

Não entendi esse seu código, vc tem alguma classe DAO ? Vc ta puxando a conexão e colocando no mesmo lugar onde ta fazendo a gravação, a conexão tem de ser feita numa classe a parte (eu costumo fazer isso) e depois eu chamo-a impostando em meu objeto.

Então estou seguindo oq mandam na faculdade, foi direto em um actionperformad não criei uma classe DAO não.

Você verificou o que @Tsuhiro23 falou? Valor em branco “” não é a mesma coisa que NULL. Como você está gravando diretamente o valor do componente da tela, então o banco de dados vai aceitar normalmente o valor em branco. Você terá que fazer um tratamento, se for “” em branco então grava null (usando o método setNull ao invés de setString). Dessa forma o banco de dados vai retornar erro de não permitir nulo.

Entendi! muito obrigado irmão vou tentar e posto aqui!