Postgresql salva coisas vazias

eae pessoal, sou novo aqui rs, vamos lá: criei uma tela de “novo usuario”, para que só quem entrasse no meu programa teria que cadastrar um usuario e uma senha antes, ate ai tudo ok, porem quando cadastra sem usuario e sem senha ele salva no banco de dados e reconhece como se fosse um usuario e que tem uma senha, totalmente vazias, utilizei o postgresql para fazer o banco, para corrigir o erro tentei colocar “NOT NULL” na criação da bd e nao funcionou, agradeceria se pudesse me ajudar

Analise seu código sql e também a instrução para ver se está tudo certinho (execute em modo debug). Com relação ao not null, essa instrução serve para dizer que o campo da tabela não aceita nulo (e provavelmente deveria estornar um erro). Aconselho a utilizar MySQL, acho ele mais produtivo que Postgresql.

utilizei esse codigo para criar o bd:
create table login (
id serial not null,
login varchar not null,
senha varchar not null,
constraint id_pk primary key(id)
)

O problema com Null é que ele é meio confuso em banco de dados.

Por exemplo, no Postgresql, uma string vazia “” nao é nula.
(Já no Oracle é, o que sempre causa confusoes em bd diferentes).

Se você quiser realmente garantir essas consistências no banco de dados
(e muita gente reclamaria muito dessa prática), você pode criar uma constraint do tipo Check pra forçar o tamanho mínimo do usuário ou senha.
Daí claro, você precisa levar em conta que a pessoa pode só digitar espaços em branco.

No final seu caso ficaria assim:

create table login (
id serial not null,
login varchar not null,
senha varchar not null,
constraint id_pk primary key(id),
constraint check_login check ( length(trim(login)) > 0),
constraint check_senha check ( length(trim(senha)) > 0)
)

Apesar do comando acima prevenir esses problemas eu realmente recomendo que você crie tipos específicos em seu sistema para Login e Senha e que neles você faça essas validaçoes.

como assim tipos especificos?

obrigado amigo, funcionou mesmo

Por exemplo, vamos dizer que você queira que sua senha tenha os seguintes requisitos:

  • Contenha letras maiusculas, mínuculas e caracteres especiais
  • Tenha mais de 8 dígitos

Você cria uma classe Senha, que recebe uma String no construtor, que valida que esses requisitos sao verdadeiros. Se nao forem, lançam uma exception.

Na sua classe Login, ao invés de ter um campo String senha, você teria Senha senha;

Com isso você tem certeza que quando criar um login, a senha é válida.

ah sim, entendi muito bem, obrigado pela explicação