Null é diferente de vazio, se você usa um setString() em um PreparedStatement, e essa String é vazia, ela será setada como vazia no banco, não como NULL.
Seria algo assim:
create table usuarios (id integer auto_increment primary key, nome varchar(50) not null);
insert into usuarios (nome) values (null);
Essa expressão não vai inserir um registro no banco porque o campo "nome" não pode ser nulo.
Mas essa vai!
insert into usuarios (nome) values ('');
Então, pra setar um valor como nulo em um PreparedStatement é necessario usar o metodo setNull() e não simplesmente setar uma String vazia com setString().
PreparedStatement stmt = conexao.prepareStatement("insert into usuarios (nome) values (?)");
String nome = "";
if(nome==null||nome.equals("")){
stmt.setNull(1, Types.VARCHAR);
}else{
stmt.setString(1, nome);
}
http://java.sun.com/j2se/1.5.0/docs/api/java/sql/PreparedStatement.html#setNull(int,%20int)