Só usei JDBC para testes, normalmente só usava JPA com Hibernate, mas agora tive que começar um projeto usando JDBC e me deparo com o seguinte problema, o método setInt não aceita valores nulos e o campo não é obrigatório, o único jeito que consegui fazer funcionar foi com setObject ou então removendo o campo da query do sql quando fosse nulo, desse jeito pode me atrapalhar no futuro, quero saber se não existe uma forma melhor de fazer isso?
stmt.setInt(5, null); //não funciona
stmt.setLong(5, new Long(null)); //não funciona
stmt.setInt(5, new Integer(null)); // não funciona
Exemplo:
[code]PreparedStatement stmt = this.con.prepareStatement(“INSERT INTO pessoa (nome, idade) VALUES (?, ?)”);
stmt.setString(1, pessoa.getNome());
stmt.setObject(2, pessoa.getIdade());
stmt.execute();
con.close();[/code]
No caso é assim que você quer dizer?
[code]PreparedStatement stmt = this.con.prepareStatement(“INSERT INTO pessoa (nome, idade) VALUES (?, ?)”);
stmt.setString(1, pessoa.getNome());
if (pessoa.getIdade() != null) stmt.setInt(2, pessoa.getIdade());
else stmt.setNull(2, Types.INTEGER);
stmt.execute();
con.close();[/code]
Vou usar setObject mesmo, acho que não vou ter problemas no futuro usando dessa forma.
[code]PreparedStatement stmt = this.con.prepareStatement(“INSERT INTO pessoa (nome, idade) VALUES (?, ?)”);
stmt.setString(1, pessoa.getNome());
stmt.setObject(2, pessoa.getIdade(), Types.INTEGER);
stmt.execute();
con.close();[/code]
Obrigado.
setObject é um método mal-documentado e que se comporta de formas diferentes conforme o driver (e a versão desse driver) de banco de dados que você usa.
Tente não usar isso se você tiver de mudar de banco e não quiser ter surpresas desagradáveis.