Galera ainda estou com esse problema preciso recuperar o nº de campos de um banco para dimensionar meu array... estou fazendo assim
int i =0;
String sql="select count(*) as valor from tbfilial";
Statement st=conexao.createStatement();
ResultSet rs=st.executeQuery(sql);
i=rs.getInt("valor");
Mas não dá certo ele não retorna o valor correto
alguém tem uma luz... um exemplo sei lá ... tenho certeza q é algo simples mais ta foda.....
É cara, como o Daniel falou, se você quer o número de colunas use o método getColumnCount da classe ResultSetMetaData.
Mas, se você quer a quantidade de registros, sua consulta está correta. Talvez o erro esteja em outro lugar. O número retornado é impreciso? Ou outro erro ocorre?
om1
vc não está esquecendo de executar
rs.next();
antes de
i=rs.getInt("valor");
não?
rocha
Galera eu descobri o q ta acontecendo mais não consegui resolver.... é o seguinte o código:
está assim....
try {
int i =0;
String sql="select count(*) as valor from tbfilial";
Statement st=conexao.createStatement();
ResultSet rs=st.executeQuery(sql);
if (rs.next());{
i=rs.getInt("valor"); }
} catch (Exception e) { }
O q eu fiz testei este código em uma classe separada daí no teste coloquei no catch { i = 2; } e fiz um System.out.println(i); no banco tem 15 registros ele o q foi impresso foi 2..... agora pq ele está levantando uma excessão isso eu não sei..... ta fod.................. :roll:
Rocha
_fs
Cara, você não explicou pra gente ainda o que quer número de registros ou de colunas?
Se for de registros e você realmente fez o que falou:
catch( Exception e )
{
i = 2;
System.out.println( i )
}
Acho bem difícil imprimir algo diferente de 2 hehe
E outra coisa, o que esse ‘;’ está fazendo logo depois do if? hehe
E om, ao perguntar rs.next(), o comando já é executado.
Já reparei que toda vez que alguém quer fazer um “select count(*)” de alguma coisa é porque precisa dimensionar um array[] para poder fazer o “select campo1, campo2… from…” e retornar os resultados para alguma outra rotina.
Isso é uma ***** (desculpem a minha boca suja, é que fico revoltado de ver isso acontecendo todo santo dia) porque
a) não é preciso fazer isso e
b) quem me garante que entre o “select count()", obter o valor, e então executar o comando correto (“select campo1, campo2 … from…”) não vai haver alguma inserção ou exclusão que vai alterar a contagem e “fritar” o que você queria fazer? Na verdade estamos fazendo DUAS consultas em vez de uma, e as duas podem acabar retornando resultados diferentes. Sem contar que "select count()” em alguns bancos é superlento (por exemplo, no MS SQL Server, tanto é que a documentação da Microsoft recomenda não fazer select count(*) se possível).
Em vez disso:
Criar um ArrayList (java.util.ArrayList para ser mais claro)
Usar o métod add() para acrescentar os dados que você vai lendo ao arraylist
Depois que leu tudo, usar o método toArray() para retornar um array das coisas que você pôs dentro do ArrayList. O array vem dimensionado certinho, sem nada sobrando ou faltando, e você só faz UMA consulta ao banco.
_fs
“thingol”:
Sem contar que "select count()" em alguns bancos é superlento (por exemplo, no MS SQL Server, tanto é que a documentação da Microsoft recomenda não fazer select count() se possível).
Opa cara, pode me indicar onde está escrito isso por favor? Já tinha notado, mas não consegui fazer testes decentes pra provar pro pessoal aqui.
louds
[modo_chato on]
Se voce estiver dentro de uma transação com nivel serializable o banco tem que garantir.
Acho que nem precisa de tanto, repeatable-read já basta. Maioria dos SGBD usam como padrão um desses 2 niveis.
[modo_chato off]
rocha
“thingol”:
Em vez disso:
Criar um ArrayList (java.util.ArrayList para ser mais claro)
Usar o métod add() para acrescentar os dados que você vai lendo ao arraylist
Depois que leu tudo, usar o método toArray() para retornar um array das coisas que você pôs dentro do ArrayList. O array vem dimensionado certinho, sem nada sobrando ou faltando, e você só faz UMA consulta ao banco.
Blz legal cara, vc tem algum exemplo disso pra mim…