Como pegar etorno de select(count)?

8 respostas
C

Olá, bom dia. Como eu pego o int retornado pelo comando abaixo, usando connection como mostrado no exemplo?

Connection connection = new ConnectionFactory().getConnection();
		
		PreparedStatement stmt = connection.prepareStatement("" +
				" SELECT COUNT(*) FROM tabelax" +
				" where data = xxxx ");
		ResultSet rs = stmt.executeQuery();
Grato, Carlos.

8 Respostas

C

Faça assim:

rs.next();
Integer result = rs.getInt(1);
ViniGodoy

Melhor ainda:

Connection connection = new ConnectionFactory().getConnection();
PreparedStatement stmt = null;
ResultSet rs = null;
try {		
   stmt = connection.prepareStatement(
      " SELECT COUNT(*) AS contagem FROM tabelax" +
      " where data = ?");
  //Use parâmetros para não concatenar Strings na query
  stmt.setString(1, "xxxxx");
  rs = stmt.executeQuery();
  //Prefira dar nomes as suas colunas de totais
  return rs.next() ? rs.getInt("contagem") : 0;
} finally {
   //Feche os recursos num finally
   if (connection != null) connection.close();
   if (stmt != null) stmt.close();
   if (rs != null) rs.close();
}
ViniGodoy

cvinicius:
Faça assim:

rs.next(); Integer result = rs.getInt(1);

Por que usou Integer e não int? O método getInt sempre retorna o tipo primitivo int.
Mesmo que a coluna seja nula.

C

Sim eu sei que ele retorna um int primitivo, foi apenas para responder a pergunta do cmendes, mas um int primitivo pode ser visto como um Integer Wrapper, foi apenas uma maneira de exemplo.

Flw.

C

Cara, aparentemente funcionou, mas está me dando um resultado diferente do que quando executo o comando diretamente no banco.

try { stmt = connection.prepareStatement("" + " SELECT COUNT(*) as c FROM tabela" + " where data BETWEEN '19-nov-2010' AND '19-jan-2011' "); //Use parâmetros para não concatenar Strings na query // stmt.setString(1, "19-nov-2010"); // stmt.setString(2, "19-jan-2011"); rs = stmt.executeQuery(); //Prefira dar nomes as suas colunas de totais System.out.println(rs.next() ? rs.getInt("c") : 0);
Apresenta resultado 103.
Já dando comando direto no banco:

apresenta 137.
Qual o significado deste comando:[b] (rs.next() ? rs.getInt("c") : 0)[/b] - o erro poderia estar aqui?

rael_gc
System.out.println(rs.next() ? rs.getInt("c") : 0);

é o chamado “if ternário”, é o mesmo que:

if(rs.next()) System.out.println(rs.getInt("c"));
else System.out.println(0);

É o tipo de coisa que os professores adoram falar que é feio de fazer, mas na prática muita gente usa, e acho que deixa o código bem menor em algumas situações, como acima.

Com certeza o erro não está aí.

ViniGodoy
stmt = connection.prepareStatement(""
   " SELECT COUNT(*) as c FROM tabela" +  
   " where data BETWEEN ? AND ?");  

stmt.setDate(1, dataInicio);
stmt.setDate(2, dataFim);

Use em dataInicio e dataFim objetos do tipo Date. Você não precisa conhecer o formato de data em string do banco. Isso deixa o código mais portável, e evita a concatenação feia.

C

Ok, muito obrigado…

Criado 19 de janeiro de 2011
Ultima resposta 24 de jan. de 2011
Respostas 8
Participantes 4