Numero de Campos do banco

14 respostas
rocha

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.....

Rocha

14 Respostas

danieldestro

Para o número de campos, use o ResultSetMetaData.

_fs

É 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 :expressionless: 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.

rs = stmn.executeQuery( "SELECT count(*) from tTabela" );		
			while( rs.next() )
				System.out.println( rs.getString( 1 ) );

Testado e aprovado.

om1

Eu sei, mas no primeiro post não tem isso. :wink:

rocha

Olá Lipe o ; e virgula foi um erro de digitação na hora de fazer o post mas no código não tem não… heheh…

Cara é o seguinte eu quero pegar o numero de registros para definir o tamanho de um array pois este montara um select posteriomente…

eu coloquei o rs.next() depois do q o om postou… e um amigo me disse q funcionaria se eu fizesse essa verificação

logo depois desse código eu faço o seguinte

String[] filiais = new String[i];

dai faço um select no banco e guardo neste array…

O problema é q está ocorrendo uma excessao sql… mas pq o resto de código sql dá certo nenhum causa execeção nenhuma

Rocha

caiofilipini

Qual é a Exception? Posta o stack trace aí…

[]'s

rocha
"caiofilipini":
Qual é a Exception? Posta o stack trace aí...

[]'s

com/fers/comum/Filial.java [234:1] unreported Exception java.sql.SqlException; must be caught or declared to be thown

Statement st=conexao.createStatement(); 

com/fers/comum/Filial.java [234:1] unreported Exception java.sql.SqlException; must be caught or declared to be thown

ResultSet rs=st.executeQuery(sql);

com/fers/comum/Filial.java [234:1] unreported Exception java.sql.SqlException; must be caught or declared to be thown

i=rs.getInt("valor");

Rocha....

Ironlynx

Vc precisa colocar o seu código num try-catch! :wink:

T

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. :wink:
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…

Rocha :roll:

Criado 31 de agosto de 2004
Ultima resposta 8 de set. de 2004
Respostas 14
Participantes 8