Brother … na interface ResultSet não se tem nenhum método ou atributo que tenha a quantidade total de registros …
Uma solução rápida (sem pensar muito, digo!) seria criar um contador. Ou seja, você percorre o resultado e para cada ítem encontrado vc acrescenta 1.
[code]ResultSet rs = … ;
int cont = 0;
while(rs.next()) {
cont++;
}[/code]
Depois disso … é necessário o código abaixo!
java.util.Random num = new java.util.Random();
int i = num.nextInt(cont+1);
pronto … i vai ser um número randômico de 0 até o número de registros do seu resultado!
depois disso você pode utilizar o método absolute(int);
Esse método vai colocar o cursor do ResultSet na posição que você especificar …
execmplo:
Se você presar atenção à interface ResultSet verá que tem um método relative(int). Esse método é parecido mas pode confundir um pouco. Ele move n registros a partir do registro atual …
ResultSet noticia = stat.executeQuery( “select * from noticias order by rand() limit 1”);
Para se conseguir o último registro *
ResultSet noticia = stat.executeQuery( “select * from noticias order by nome desc limit 1”);
e para obtermos o primeiro *
ResultSet noticia = stat.executeQuery( “select * from noticias order by nome limit 1”);
(lembrem-se que em sql é considerado uma heresia os termos primeiro e último: não há ordem estabelecida para registros; existe isto sim uma ordem de valores de determinada(s) colunas, daí a cláusula ‘order by’)
Dependendo da necessidade, é claro, não faz sentido nenhum tratarmos um resultset com TODOS registros para pinçarmos apenas um. Mesmo as 3 consultas acima somadas deverão ser mais rápidas que uma que traga todos registros, sem falar no “consumo” de memória.
Por mais engenhosas que sejam soluções em java (ou quaisquer outras linguagens) a maneira mais rápida de se proceder a “filtros” em bancos de dados sempre será via o prório SGBD!
Pooo … claro … eu concordo plenamente com o que vc falou spier …
A primeira coisa que eu perguntei foi:
[i]Você quer saber como fica o SQL ou o código JSP para tratar o ResultSet ?
[]s[/i]
como ele não respondeu eu tive que fazer uma escolha … mas sim … o processamento da seleção é muito mais eficiente deixando o mesmo por conta do SGBD … não tenha dúvida …
[color=“darkblue”]Olá!
3º forma de se fazer isso de 394820394, segundo nosso amigo Clandestino…
ResultSet rs = stmt.executeQuery(“LAST_INSERT_ID()”);
Essa função é tratando-se de MySQL, ela retorna o último indice inserido no banco de dados…
Isso é bom no caso de vc criar inserir um indice e no mesmo instante querer saber o valor gerado…
Pelo menos eu consigo enxergar assim essa sua dúvida, não sei se resolveria
Cara esses exemplos foram muito legais, respondendo ao clandestino, preferia que fosse no sql, pois como o próprio spier disse é bem mais rápido e consome, menas memória e código.
e na instrução mysql tem como eu filtrar apenas os dois últimos ou o 3 últimos ???
esse é para peguar dois registros mas o valor é randômico, como faço para pegar os dois últimos ???