Pegar nome das tabelas

9 respostas
C

Bom pessoal é o seguinte.....Preciso pegar o nome das tabelas do meu BD...Tentei o seguinte

Connection con = DriverManager.getConnection(...);
DatabaseMetaData meta = con.getMetaData();

ResultSet tabelas = meta.getTables("", "", "", null);

while(tabelas.next()){
   System.out.println(tabelas.getString("TABLE_NAME"));
}

Só que ele ñ mostra nd....Preciso pegar as tabelas p/ dai com elas montar uma JTree..

E aproveitando na JTree como q faço p/ saber qual arquivo foi selecionado?
Alguem pode me ajudar??
Grato!!!

9 Respostas

B

Ola,

Pra pegar as tabelas vc tem que dizer qual é o schema da base… dá uma olhada neste exemplo:

ResultSet rs = dbmt.getTablePrivileges ("%","XXX", null);//XXX é o schema
    s = "";
    int columnCount = rs.getMetaData ().getColumnCount ();
    for (int x = 1; x <= columnCount; x++) {
      s += rs.getMetaData ().getColumnName (x) + " , ";
    }
    p ("Columns Name = " + s);
    while (rs.next ()) {
      s = "";
      for (int x = 1; x <= columnCount; x++) {
        s += rs.getString (x) + " , ";
      }
      p (s);
    }

Considere que a conexão já foi aberta e o dbmt é o DataBaseMetaData.

em relação a JTree vc tem o javax.swing.event.TreeSelectionListener, que quando um node da JTree é selecionado ele é invodado.

C

OPa valeu pela resposta cara + seguinte no lugar do XXX eu coloquei “public” e dai um exemplo do q apareceu

Columns Name = TABLE_CAT , TABLE_SCHEM , TABLE_NAME , GRANTOR , GRANTEE , PRIVILEGE , IS_GRANTABLE , 
null , public , department , postgres , postgres , DELETE , YES , 
null , public , department , postgres , aluno , DELETE , NO , 
null , public , department , postgres , posjava , DELETE , NO ,

No caso department é uma das tabelas do banco…Não sei se falei errado ou se fiz errado, mas preciso que apareça as tabelas q já esta aparecendo…DAi se tiver trigger etc e as colunas das tabelas…

Valeu pela ajuda cara!!

B

Ola,

Bom, não seu como é o schema do postgree, mas como exemplo cito o mysql que tenho mais “intimidade”, o schema “mysql” dele tem as tabelas de administração da base… como a tabela de usuário do banco… etc., então acho que o schema “public” do postgree tb tem estas tabelas… pra vc recuperar as tabelas da sua aplicação, por exemplo, terá que indicar o seu schema…

Em relação as triggers tem metodos específicos pra vc recupera-las. dá uma olhada lá… qq coisa posta ae.

C

VALEU bRUNO. É QUE EU Ñ TO COM O CODIGO AQUI, MAIS VOU VER SE POSTO A NOITE…

Com ele eu to pegando o nome das tabelas do BD e pegando td as colunas de cada tabela, meio que na gambiara eu acho…hehehe
E depois com isso tenho q montar a JTree…

Só q ainda falta pegar os Trigger views etc…

Tenho um exemplo de JTree e tem uma parte q ele compara se é = um diretório, ai q esta o “problema”, eu estava pensando em colocar as tabelas em um array de string e ems eguida criar os nós e pegar as colunas de cada tabela e fazer os flhos, ñs ei se iria funcionar.Bom é isso

C

Bom ta ai Bruno a parte de código...Se tiver meio confuso é "normal"..ehehe

dbmd = con.getMetaData();
    
        // Specify the type of object; in this case we want tables
        String[] types = {"TABLE"};
        
        resultSet = dbmd.getTables(null, null, "%", types);
                       
              // Get the table names

        while (resultSet.next()) {
            // Get the table name
            String tableName;

                    tableName= resultSet.getString(3);
    
            // Get the table's catalog and schema names (if any)

           System.out.println("Tabela: "+tableName);
            
        }
            
            ResultSet rs = stmt.executeQuery("select * from employee");
            ResultSetMetaData rsmd = rs.getMetaData();
            
        for(int y=1;y<=rsmd.getColumnCount();y++){
             System.out.println("column "+y+" name = "+rsmd.getColumnName(y));
        }

Até aquilo o q ele faz:

Tabela: department
Tabela: employee
Tabela: mensagens
Tabela: usuario
Tabela: validate
column 1 name = emp_no
column 2 name = first_name
column 3 name = last_name
column 4 name = phone_ext
column 5 name = dept_no
column 6 name = job_code
column 7 name = job_grade
column 8 name = job_country
column 9 name = salary

Ele esta listando as tabelas do banco, e como eu fiz uma query p/ verificar a tabela employee ele listo as colunas dessa tabela......

Só q como q faço p/ na parte onde ele lista as tabelas saber numero de tabelas p/ dai assim criar um array com o nome das tabelas e depois na query eu só ir colocando esse arrayincrementando o indice com o nome das tabelas???

ACho q é isso ..heheh

Valeuuuu

B

Ola

Bom cara… ae bate aquele velho “problema” do ResultSet… não tem como saber o numero de linhas de um resultado previamente…

Mas acho que vc pode armazenar isto no array dinamico, tais como o ArrayList, Vector… sem problemas.

C

Mais se eu ñ sei o tamanho como vou defini-lo?
E como é o ArrayList??

Valeu!!
:wink:

L

não precisa definir o tamanho…
o ArrayList é uma classe tipo um array sabe… que você não precisa falar o tamanho antes!
é assim…

ArrayList lista = new ArrayList();
lista.add("valor");

se tiver dúvida em relação aos métodos sugiro a api!
http://java.sun.com/j2se/1.5.0/docs/api/

bele?

abraço!

C

Fala galera blz…Bom consegui resolver aqui agora só ta faltando o lançe do JTree…
Já fiz a JTree, mas ñ ta funcionando o método p/ pegar o nó selecionado…
Tentei isso

public void ValueChanged(TreeSelectionEvent e){
        System.out.println("ta ae: "+ e.toString());
        System.out.println("teste");
  }

Mas não funciona…Como que tem q ser???
Valeu…
Abraço!

Criado 27 de novembro de 2006
Ultima resposta 3 de dez. de 2006
Respostas 9
Participantes 3