No vbscript tem essa função que informa a quantidade de linhas que a sua query retornou.
E em java, como fazer isso? Não achei nenhum método até agora da classe ResultSet que faça isto.
Será possível que vou ter que executar um SELECT COUNT toda vez que precisar obter a quantidade de linhas retornadas por uma query??
A maneira em Java é pouco elegante, chega a parecer xunxo.
Mas é assim.
[code]//Crie um result statement navegável
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql); //Rode um sql qualquer
rs.last(); //Vá para a última linha do resultSet:
int rows = rs.getRow(); //Pegue o número da linha
rs.beforeFirst(); //Se necessário, volte para o início.[/code]
[quote=ViniGodoy]A maneira em Java é pouco elegante, chega a parecer xunxo.
Mas é assim.
[code]//Crie um result statement navegável
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql); //Rode um sql qualquer
rs.last(); //Vá para a última linha do resultSet:
int rows = rs.getRow(); //Pegue o número da linha
rs.beforeFirst(); //Se necessário, volte para o início.[/code][/quote]
so lembrando que nem todos drivers implementam corretamento a a navegacao no ResultSet.
Mas fácil.
[/quote]
Vitu, estamos falando sobre a contagem de linhas, e não de colunas ok?!
Aí Vini, quando eu chamo o rs.last() dá a seguinte exceção!!! (já rolou contigo isso?) =/
[quote]java.sql.SQLException: Operação inválida para encaminhar apenas conjunto de resultados: last
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)[/quote]
Tava bom d+…
Será q é por causa do que o jgbt falou???
[quote=Rage]Vitu, estamos falando sobre a contagem de linhas, e não de colunas ok?!
Aí Vini, quando eu chamo o rs.last() dá a seguinte exceção!!! (já rolou contigo isso?) =/
[quote]java.sql.SQLException: Operação inválida para encaminhar apenas conjunto de resultados: last
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)[/quote]
Tava bom d+…
Será q é por causa do que o jgbt falou???[/quote]
vc ta usando bd oracle?
se sim, o driver da oracle implementa corretamente a navegacao no ResultSet
me parece que vc nao ta usando o driver padrao da oracle.
Antes de ver a questão do driver, creio que posso estar fazendo algo de maneira equivocada:
Ao criar meu ResultSet, não estou sabendo como setar o tipo de scroll.
Acho falta as configurações que você citou
(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)
try
{
String query = "SELECT * FROM user.tablej WHERE rownum <= 8";
conn = getConnection();
pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();
rs.last();
int rsSize = rs.getRow();
Como configuro isto usando PreparedStatement ao invés do Statement?
O driver que estou usando é o classes12.jar (baixei no próprio site da oracle)
try
{
String query = "SELECT * FROM user.tablex WHERE rownum <= 20";
conn = getConnection();
pstmt = conn.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = pstmt.executeQuery();
rs.last();
int rsSize = rs.getRow();
System.out.println("rsSize: "+ rsSize);Valeu pela ajuda!!! 8)
[]´s! [/quote]
Prefiro muito mais criar um método com “SELECT COUNT…” e chamá-lo toda vez que precisar atualizar a quantidade de linhas…
Esse método não me inspira muita confiança não…
Rsrsrs…
[quote=ViniGodoy]Mas… vamos falar a verdade… soluçãozinha tosca, né?
Achei a recomendação num site da sun…[/quote]
Verdade, solução tosca.
Difícil acreditar que os caras não pensaram em algo mais prático pra obter isso, uma coisa tão elementar, tão básica e essencial…
[quote=Linkel]Prefiro muito mais criar um método com “SELECT COUNT…” e chamá-lo toda vez que precisar atualizar a quantidade de linhas…
Esse método não me inspira muita confiança não…
Rsrsrs…[/quote]
Tem razão, se houver tempo vou criar um método genérico que possa de alguma maneira ser acessado retornando o count de diferentes queryes…por hora vai ficar assim mesmo, pois está funcionando!
[]´s
[quote=Linkel][quote=Rage]Beleza kras, acho que conseguí!!!
try
{
String query = "SELECT * FROM user.tablex WHERE rownum <= 20";
conn = getConnection();
pstmt = conn.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = pstmt.executeQuery();
rs.last();
int rsSize = rs.getRow();
System.out.println("rsSize: "+ rsSize);Valeu pela ajuda!!! 8)
[]´s! [/quote]
Prefiro muito mais criar um método com “SELECT COUNT…” e chamá-lo toda vez que precisar atualizar a quantidade de linhas…
Esse método não me inspira muita confiança não…
Rsrsrs…[/quote]
E duplicar o acesso ao banco para essas queries? Sei lá, tem que ver com calma se sempre vale à pena isso…
na real dependendo da situação, cada solução pode ser util.
se é para otimizar, vale apena criar um contador e incrementa-lo dentro do while do ResultSet, semprecisar nem mesmo navegar no ResultSet para descobri o numero de linhas.
Se vc precisa do rowcount no final da varredura do ResultSet, faça um contador. Senão, a melhor solução é tu criar um método que englobe o teu select principal com o “SELECT COUNT(1) AS ROW_COUNT FROM (” + teu SQL + “)” para fazer o count da tua consulta. Lembrando que será mais performático tu usar a mesma connection. Se nao me engano nas novas versões do jdbc ja tem coisa implementada pra isso.