Tava kerendo um metodo q me retorne o numero de linhas de 1 select num ResultSet, procurei na api, encontrei getFetchSize(), mas fiquei na duvida qto a descricao dele, alguem ja usou este metodo e sabe dizer se eh p isto msm ou algum outro q retorne o tamanho d linhas do resultSet? Por enqto, vou testando, vlws…
Duvida ResultSet
11 Respostas
Prq vc não usa o retorno do SQL , usando a função COUNT() retornando a qtde de registros que SELECT atingiu ?
SELECT COUNT(campo) AS numLinhas FROM tabela
int numLinhas = rs.getInt("numLinhas");
Vlw a dica, mas se tivesse um metodo no proprio resultSet seria melhor, pois se n, vo ter q fazer este select em tds os metodos da minha persistencia (e eu acho meio “feio”). Se n tiver jeito vo fazer assi msm.
Mas vlw sim.
Já pensou em criar um método, extendendo a classe ResultSet?
ResultSet num é uma interface? Acho que você quis dizer implementar ResultSet
Procure sobre ResultSetMetaData.
Metadados do JDBC.
Tem um tutorial no GUJ.
http://www.guj.com.br/java.tutorial.artigo.24.1.guj
[ ]'s
bem, lembrando q o q eu kero eh extrair os dados (inclusive o nome das colunas) do ResultSet p/ uma string, pois eu vo trafegar essa String[][] pela rede e o objeto ResultSet (infelizmente) n eh serializavel.
axo q implementar resultSet n seria a opcao mais facil, mas vlw a dica. eu queria saber se tem algum metodo q me dar o numero de linahs do meu resultSet ou uma solucao p isso, pois preciso disto p extrair os dados do resultset e jogar na String[][].
Procure sobre ResultSetMetaData.Metadados do JDBC.
Tem um tutorial no GUJ.
http://www.guj.com.br/java.tutorial.artigo.24.1.guj[ ]'s
Metadados n eh so p pegar as colunas??? Eu to usando metadados p extrair os nomes e qtd das colunas. Linhas sao outros 500.
Revirando os meus códigos anteriores, lembrei de um jeito de pegar o número de linhas de um ResultSet:
Statement seuStatement;
String suaQuery;
ResultSet seuResultSet = seuStatement.executeQuery(suaQuery);
seuResultSet.last();
int numLinhas = seuResultSet.getRow();
seuResultSet.beforeFirst();
Basicamente, você vai até o último Row do ResultSet e depois pega o índice desse último Row. Usa-se o beforeFirst() para que o cursor do ResultSet volte ao estado inicial.
Veja se funciona por ai
inté
Lembrando que para o método apresentado acima, vc terá que criar um resultset navegável, pois resultsets são, por default, foward only. Para tornar o resultset navegável, quando criar o Statement faça o seguinte:
Statement seuStatement = suaConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
A porpriedade de navegação dependerá do driver que você estiver utilizando.
Ver: http://www.guj.com.br/posts/list/42271.java#224882
vlw povo, eu ia fazer este esclarecimento q o bispo fez, blz entao.
este negocio de trafegar resultSet pela rede, vcs fizeram como eu fiz? extraindo o resultado p uma string[][] e enviar via rede p a interface do cliente? pq eu achei a maneira mais facil, e queria saber se tava implementando semelhante ao que o pessoal faz.
Ae galerinha, consegui, vo disponibilizar o codigo, caso alguem necessite, lembrando q nele, eu dou 1 select e retiro (jogando numa Strting[][]) tanto as colunas, qtos os dados do ResultSet, q podem ser jogados num JTable via rede (ja q o ResultSet n pode trafegar em rede), por exemplo:
public String[][] listaSistemas() throws RemoteException {
Statement stmt;
ResultSet rs = null;
String[][] dados = null;
try {
stmt = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = "SELECT s.id, s.nome, s.estado, s.descricao, s.dir_documentacao, s.data_inicio, s.data_previsao, " +
"s.data_validacao, s.data_atraso, s.causa_atraso, c.num_contrato, p.nome, b.nome, l.nome FROM sistema s, " +
"contrato c, plataforma p, banco_dados b, linguagem l WHERE (c.num_contrato = s.fk_contrato) " +
"AND (p.id = s.fk_plataforma) AND (b.id = s.fk_banco_dados) AND (l.id = s.fk_linguagem);";
rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int numColunas = rsmd.getColumnCount();
rs.last();
int numLinhas = rs.getRow();
dados = new String[numLinhas+1][numColunas];
for (int i=0; i<numColunas; i++)
dados[0][i] = rsmd.getColumnName(i+1);
int k=0;
rs.beforeFirst();
while (rs.next()) {
k++;
for (int i=0; i<numColunas; i++)
dados[k][i] = rs.getString(i+1);
}
} catch (SQLException sqle) {
System.err.println("Erro: SQL Exception");
sqle.printStackTrace();
}
return dados;
}
Qlq duvida, so perguntar