Help comandos sql

7 respostas
S

Alguem poderia me dar um exemplo, gostaria de algo bem simples:

Qdo realizo uma consulta e quero buscar o ultimo resultado, verificar se eh o q quero, e no caso pegar penultimo e antepenultimo…

obs: nao leve em conta o exemplo e sim a logica, nao quero a maneria mais facil e sim como se faz para, apartir dai, buscar minhas respostas.

*nao quero count() * como disse nao interessa;
ex:“SELECT NAME AND IDADE FROM ALUNOS ORDER BY (IDADE)”

Digamos que hajam varios joaos, quero buscar o ultimo

rs = stmt.executeQuery(sql);

rs.last();

rs.next(); // correto ou errado?!? acho que ha um comando

//aqui não sei qual por favor me ajudem…

…

rs.first()// nao sei se estou antes da primeiro caso

// fazendo um rs.next() estarei na primeira ou segunda linha.

por favor um exemplo simples eh o que peço.
Desculpem pela grosseria, estou um pouco nervoso…

abração…

7 Respostas

S

Olá,

partindo da sua sql (order by idade) o que vocÊ stá querendo é os n mais velhos por nome (???) ou qualquer outro agrupamento, certo?

Primeiro , será necessário incluir também este agrupamento no ORDER BY, senão o resultado pode ser Maria (a mais velha) Pedro(menos velho) Maria (outra, mais nova q pedro)…

Em seguida, se puder definir a cláusula ORDER BY DESC, para obter sempre do mais velho ao mais novo, uma maneira é algo assim (pseudo código, não testado!)

rs = executeQuery(SQL)
int N = 3
String nome ="";
int n = 0;
while rs.next() {
  if (!nome.equals(rs.getString("nome")) ) {
     nome = rs.getString("nome");
     n = 0;
  }
  if (n < N) {
      System.out.println(rs.getString("nome") + " - " + rs.getInt("idade"); 
  }
}

Basicamente a cada quebra de nome – nome.equals(rs.getString(“nome”)) == FALSO, zeramos um contador n, e imprimimos os nomes enquanto este contador for menor que uma constante N, definida anteriormente. A ordem DECRESCENTE é que vai determinar o N mais velhos por grupo.

(Se é que entendi) :???:

S

na verdade estou interessado no codigo para colocar no ultimo resultado:

rs.last();

rs.next();

rs.getString(NOME);//rs.first();

rs.next();

rs.getString(NOME);

na verdade a sql nao interessa, inventei na hora…

Quero saber como andar por todos resultados de uma consulta, voltar ao primeiro, ir ao ultimo etc.

M

caro, eu acho melhor o seguinte, faça um objeto para cada linha vinda no banco, por ex:

class Cliente {

   private String nome;
   private String blablabla;
   private float etc; ...

}

ai, vá iterando pelo teu resultset, e salvando os objetos Cliente em um ArrayList, feito isso, tu tem um ArrayList prontinho pra navegar por onde quiser e pegar o teu objeto (linha do banco) ... é mais limpo, e OO! :)

S

tem como “caminhar” pelas respostas com, por exemplo, rs.last() ?!?

S

Olá,

Tem, veja todas possibilidades (métodos) no sdk - tem até exemplos: :eek:

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

S

“matheus”:
caro, eu acho melhor o seguinte, faça um objeto para cada linha vinda no banco, por ex:

Mas java.sql.ResultSet já não retorna exatamente uma coleção de objetos? Numa classe de negócio, por exemplo, pra quê duplicar algo? E pra cada situação, digamos, cliente + compras, clientes + debitos, clientes + …, criar classes? Só pela OO?

S
Obrigado pela ajuda pessoal, desculpem por nao saber expressar corretamente o que queria, ja consegui contornar meu problema.

caminho pelo rs.next(); ate encontrar o que procuro, mas ainda nao encontrei exemplos de:

rs.last(); // preciso usar a proxima linha ou não?!?

rs.next();

rs.getString(blablabla);

rs.first();
rs.getString(“blablabla”);

Desculpem a enrolação… Valeu pessoal.

Criado 8 de novembro de 2004
Ultima resposta 9 de nov. de 2004
Respostas 7
Participantes 3