Estou tentando salvar dados de um programa em Java para o SQLite. Achei que por eu ter colocado a chave primária como autoincrement que o BD faria esse incremento sozinho, mas não está funcionando.
Seguem os códigos:
Java:
public boolean saveUserData(Usuario u){ //obj chega ok
try{
stmt = con.prepareStatement("INSERT INTO Usuario (nome, sobrenome, "
+ "usuario, dtNascimento, telefone) VALUES (?,?,?,?,?)");
stmt.setString(1, u.getNome());
stmt.setString(2, u.getSobrenome());
stmt.setString(3, u.getUsuario());
//TODO melhorar data (essa e PainelCad)
java.util.Date d = u.getDtNascimento();
stmt.setDate(4, new java.sql.Date(d.getTime()));
stmt.setString(5, u.getTelefone());
stmt.executeUpdate();
return true;
} catch (SQLException e) {
System.err.println("Erro ao inserir usuário ou conta\n");
e.printStackTrace();
return false;
}
}
SQL:
create table CONTA(
id_conta INTEGER NOT NULL PRIMARY KEY
--GENERATED ALWAYS AS IDENTITY //Tentei isso e não funcionou, vi num fórum
-- (START WITH 1, INCREMENT BY 1),
email TEXT,
senha TEXT
)
create table USUARIO(
id_usuario INTEGER PRIMARY KEY AUTOINCREMENT,
id_conta INT NOT NULL,
nome TEXT NOT NULL,
sobrenome TEXT NOT NULL,
usuario TEXT NOT NULL,
dtNascimento DATE,
telefone TEXT,
FOREIGN KEY (id_conta) REFERENCES CONTA (id_conta)
)
Estou recebendo o erro:
org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_NOTNULL] A NOT NULL constraint failed (NOT NULL constraint failed: USUARIO.id_conta)
Bom sua exception está te dizendo que o id da conta está nullo.
Verique se no momento do insert existe o objeto conta. E se ele possui um id válido.
Caso seje uma nova conta, será necessário inseri-la antes. Só aí o seu insert de usuário irá funcionar.
Nota: Eu relacionaria o USUARIO > CONTA. conta.id_usuario
De qualquer maneira verifique na tabela usuário a coluna id_conta. Pois ela está como NOT NULL e você não está passando valor para ela. Repare sua SQL.[quote=“nanquim, post:3, topic:340923”]
stmt = con.prepareStatement("INSERT INTO Usuario (nome, sobrenome, "
+ “usuario, dtNascimento, telefone) VALUES (?,?,?,?,?)”);
[/quote]
Você não está passando valor para o campo usuario.id_conta e o mesmo é um campo NOT NULL. Pois não consta na sua instrução e ele não é AUTO_INCREMENT.
Preste atenção!
Vai manter o campo usuario.id_conta?
Se sim, ele pode ser nulo? caso sim remova apenas o NOT NULL dele.
Caso não, corriga sua SQL e parametrizea.
Ele vai receber valor no momento do insert do usuário?
Se sim, adicione ele na sua intrução SQL e não se esqueça de setar ela no STMT.
Não vai manter o campo?
Apenas remova a coluna e ta tudo certo.