Preciso fazer um select no banco e pegar o último valor de um certo campo para poder compara-lo.
Até ai tudo tranquilo.
Só que se eu não sei identificar quando uma consulta resulta em nada, ou seja, quando a select não achou dados na pesquisa.
sql = "Select valor FROM " + tabela + " WHERE data_hora = (SELECT MAX(data_hora) FROM " + tabela + ")";
ResultSet rs = stmt.executeQuery(sql);
//System.out.println(sql);
rs.next();
System.out.println(rs.getString(1));
Existe um método em ResultSetMetaData que diz se uma consulta não retornou algum resultado?
String verif_cod = null;
try{
Class.forName(driver);
con1 = (com.mysql.jdbc.Connection) java.sql.DriverManager.getConnection(URL,USE,Senha);
stmt = (Statement) con1.createStatement();
rs = (com.mysql.jdbc.ResultSet) stmt.executeQuery(“select cod from consArq”);
while (rs.next()) {
verif_cod = rs.getString(“cod”); // aqui pega o ultimo valor de um campo da tabela
}
}catch(Exception e){ System.out.println(e);
}
if(verif_cod.equals( null)) // Não encontrou nada dentro da tabela no campo cod
[quote=ViniGodoy]Eu discordo. Geralmente você vai trabalhar com o código dele cheio, e não vazio.
Então, o melhor mesmo é colocar um code guard e evitar identação:
[code]
if (!rs.next())
return;
//Se a execução chegou aqui, é óbvio que não está vazio.
[/code][/quote]
Por questões de contratos de definição, eu concordo com você.
Mas, se tratando de probabilidade e uma vez sabendo, que geralmente estará cheio e não vazio, não é melhor usar a primeira comparação sendo a provavel, economizando uma “comparação”, quando possível ?
return ((rs.next()) ? "cheio" : "vazio");
Estou questionando isso, pq foi isso que me ensinaram na faculdade. Não estou discordando de você. Valeu, viny!?
Editado:
A questão em que eu referenciei foi a qual você falou a cima usando if e else, e não esta contratual.
Contratos de definição, garantem seu objetivo com segurança, no blog do Philip Calçado, tem um artigo sobre isso. Achei bem interessante.
[quote=peerless]Mas, se tratando de probabilidade e uma vez sabendo, que geralmente estará cheio e não vazio, não é melhor usar a primeira comparação sendo a provavel, economizando uma “comparação”, quando possível ?
[/quote]
E para que poupar uma única comparação, que por sinal é uma operação violentamente rápida, “as vezes”?
O sistema não vai ficar perceptivelmente mais eficiente e o código vai ficar um pouco mais confuso.
Só pense em “economizar” comandos se você estiver num loop muito intenso ou isso constutuir realmente um gargalo na sua aplicação, descoberto através de um profiler.
Você não pode usar o getString antes de estar num registro (ou seja, antes de usar next() pelo menos uma vez);
O método getString não retornará null, no lugar vai retornar um string contendo “\u0000”. Para testar se foi nulo, você tem que dar o getString e depois usar um método esquisito chamado wasNull();