Duvida JDBC e inteiros nulos

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]

Falta de olhar a documentação, não?

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setNull(int,%20int)

No seu caso, stmt.setNull (5, Types.INTEGER);

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.