Não grava atributo em branco

bom toda vez que eu vo gravar e um Jtextfield que guarda campo data ou float ou int da erro…

acho que isso esta acontecendo porque estou fazendo isso la na classe ctr…

[code]public boolean inserirFuncionario(String nome, String cpf, String rg,
String ctps, String datanascimento, String sexo, String dataadmissao,
String datademissao, String cargo, String endereco,
String complemento, String bairro, String cidade, String uf,
String cep, String telres, String telcel, String email,
String comissao, String usuario, String senha, String situacao,
String codfunc) {

	FuncionarioDTO funcionarioDTO = new FuncionarioDTO();
	FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
    
	Date datanasc = new Date(Date.parse(datanascimento));
	Date dataadm = new Date(Date.parse(dataadmissao));
	Date datadem = new Date(Date.parse(datademissao));
	Float comis = new Float(Float.parseFloat(comissao));
	Integer id = new Integer(Integer.parseInt(codfunc)); 
	
	funcionarioDTO.setNome(nome);
	funcionarioDTO.setCpf(cpf);
	funcionarioDTO.setRg(rg);
	funcionarioDTO.setCtps(ctps);
	funcionarioDTO.setDatanascimento(datanasc);
	funcionarioDTO.setSexo(sexo);
	funcionarioDTO.setDataadmissao(dataadm);
	funcionarioDTO.setDatademissao(datadem);
	funcionarioDTO.setCargo(cargo);
	funcionarioDTO.setEndereco(endereco);
	funcionarioDTO.setComplemento(complemento);
	funcionarioDTO.setBairro(bairro);
	funcionarioDTO.setCidade(cidade);
	funcionarioDTO.setUf(uf);
	funcionarioDTO.setCep(cep);
	funcionarioDTO.setTelres(telres);
	funcionarioDTO.setTelcel(telcel);
	funcionarioDTO.setEmail(email);
	funcionarioDTO.setComissao(comis);
	funcionarioDTO.setUsuario(usuario);
	funcionarioDTO.setSenha(senha);
	funcionarioDTO.setSituacao(situacao);
	funcionarioDTO.setCodfunc(id);

	if (funcionarioDAO.inserirFuncionario(funcionarioDTO)) {
		return true;
	} else {
		return false;
	}

}[/code]

porem c eu não converto a data o float e o int… la na classe View ele me da erro na hora de passar os Jtextfield por naum ser compativel os tipos…
alguem sabe como solucionar isso???
vlwww

Eu nao entendi muito bem o erro, mas vamos ver se eu consigo te ajudar.

No caso do date, float e int, as strings que vc recebe como parametro em algum momento ficam vazias? pq se sim. isso pode ocasionar um erro na hora da conversão

Outra coisa… quando o parâmetro ta vazio, la no seu DAO, para os campos do tipo Date principalmente o ideal é vc testar se o valor ta vazio, se tiver vc usa o setNull do PreparedStatement.

Doc do setNull

setNull

public void setNull(int parameterIndex,
int sqlType)
throws SQLException

Sets the designated parameter to SQL NULL.

Note: You must specify the parameter's SQL type.

Parameters:
    parameterIndex - the first parameter is 1, the second is 2, ...
    sqlType - the SQL type code defined in java.sql.Types 
Throws:
    SQLException - if a database access error occurs

sera que vc pode me ajudar a usar o setnull?? tentei aqui mais acho que nau usei da forma correta

Bom, la vai um exemplo simples:

No seu DAO, no momento de atribuir os valores para o PS, você pode fazer assim:

PreparedStatement ps = conn.prepareStatement("INSERT INTO TABLE (id, descricao, data, valorMonetario) values (?, ?, ?, ?)");

// atributo que tenho certeza que nunca vai ser nulo
ps.setLong( 1, meuObj.getId() );

if ( meuObj.getDescricao() == null )
{
  ps.setNull( 2, java.sql.Types.VARCHAR );
}
else
{
  ps.setString( 2, meuObj.getDescricao() );
}

if ( meuObj.getData() == null )
{
  ps.setNull( 3, java.sql.Types.DATE ); // nesse caso da data, vc vai ter que ver o que vc tem no banco, se é DATE ou TIMESTAMP
}
else
{
  ps.setDate( 3, new java.sql.Date( meuObj.getData().getTime() ) );
}

if ( meuObj.getValorMonetario() == null )
{
  ps.setNull( 4, java.sql.Types.DOUBLE ); // nesse caso do valor, vc vai ter que ver o que vc tem no banco, se é DOUBLE ou FLOAT
}
else
{
  ps.setDouble( 4, meuObj.getValorMonetario() );
}

Não sei se tem jeito mais facil de fazer isso… eu quando usava JDBC fazia assim… agora eu nao me preocupo mais pq uso JPA/Hibernate :slight_smile:
(melhor coisa que ja inventaram desde o óculos com canudo)

[quote=baison]Outra coisa… quando o parâmetro ta vazio, la no seu DAO, para os campos do tipo Date principalmente o ideal é vc testar se o valor ta vazio, se tiver vc usa o setNull do PreparedStatement.

Doc do setNull

setNull

public void setNull(int parameterIndex,
int sqlType)
throws SQLException

Sets the designated parameter to SQL NULL.

Note: You must specify the parameter's SQL type.

Parameters:
    parameterIndex - the first parameter is 1, the second is 2, ...
    sqlType - the SQL type code defined in java.sql.Types 
Throws:
    SQLException - if a database access error occurs[/quote]

cara tentei de tudo jeito aqui fui testar na variavel int que tambem esta dando erro…

mais naum grava a do tipo int naum fala null mais fala assim : For input string: “”

mas ta dando erro na hora que vc esta gravando no DAO ou na hora vc ta convertendo os valores nesse método que vc colocou acima?

Coloca o erro todo ai

não cara ele da o erro na hora de grava quando vai vazio ele me da erro tipo vo por aqui como eo estava setando o null…

if (funcionarioDTO.getDatademissao().equals("")){ stmt.setNull(8, Types.DATE); }else{ stmt.setDate(8, new java.sql.Date(funcionarioDTO.getDatademissao() .getTime()));}

foda que mesmo eu tentando da um println na sql naum da cara parece que nem passa por ele o.O e retorna essa porra desse null o.O

[quote=Naruto]não cara ele da o erro na hora de grava quando vai vazio ele me da erro tipo vo por aqui como eo estava setando o null…

if (funcionarioDTO.getDatademissao().equals("")){ stmt.setNull(8, Types.DATE); }else{ stmt.setDate(8, new java.sql.Date(funcionarioDTO.getDatademissao() .getTime()));}[/quote]

Mas olha so…

Esse getDatademissao sendo um objeto ele pode estar nulo… então, vc tentar testar com o .equals("") ele vai te dar um NullPointerException… vc tem que testar se é igual a nulo, igual no exemplo que eu te passei

E ainda tem mais… verifica no banco o tipo da coluna data emissao… se é date ou timestamp

no banco é date cara no delphi vai de boa isso…

tpw eu to usando o postgres e tp tentei dessa forma que vc me falo agora e tambem a mesma coisa isso ta me deixando louco… sera que ninguem passo por isso??

[quote=Naruto]no banco é date cara no delphi vai de boa isso…

tpw eu to usando o postgres e tp tentei dessa forma que vc me falo agora e tambem a mesma coisa isso ta me deixando louco… sera que ninguem passo por isso??
[/quote]

Olha so… vamo fazer o seguinte:

1º: Teste o seu DAO colocando todos os atributos com valores validos (preenchidos)
2º: Vai colocando vazio de 1 em 1

E depois, coloca o seu metodo do seu DAO todo aki, inclusive a query

Se depois de tudo isso nao der, so pode ser banco (ou versão do driver do postgre que vc ta usando)

Eu uso Postgre aki tb… e funfa… :slight_smile:

caraaa eu acho que deve ser a versao do drive inton porque isso eu ja fiz tudo… qual versão vc esta usando???

To usando o postgresql-8.1-405.jdbc3.jar

Muito estranho kra… vc chegou a testar campo a campo para ver se é realmente esse q ta com prob?

sim m cara tenhu 3 campos data um int e um float…

c eu preencho tudo corretamente ai vai de boa… c eu deixo uma data sem me retorna null no console… apenas isso… e c eu deixo o int vazio ele me retorna outra coisa sem ser null…

que sera que eu to fazendo de errado???

[quote=Naruto]sim m cara tenhu 3 campos data um int e um float…

c eu preencho tudo corretamente ai vai de boa… c eu deixo uma data sem me retorna null no console… apenas isso… e c eu deixo o int vazio ele me retorna outra coisa sem ser null…

que sera que eu to fazendo de errado???
[/quote]

É kra… sem ver o codigo todo fica dificil… as vezes é uma besteria atoa que vc ja nem ta mais enxergando pq ja ta a horas e horas vendo isso…

Da uma parada… relaxa… depois volta a olhar o codigo q vc vai achar…

se quiser, posta a sua classe DAO ae…

olha cara chega em casa eu irei postar todas as classes ok ??? hehe pq ta foda mesmo

c alguem mais puder ajudar…

eu puis um println para mostrar o insert …

ai digitei tudo… olha o que saiu no insert

Insert into contatos(nome, data, endereco) values(jeferson,2008-09-12 -0300,4)

o que é esse -0300 ???

up