Ref.: DatabaseMetaData (Trazendo Tabela Específica)

Boa Noite!

Estou precisando obter os parâmetros de uma tabela específica segundo código abaixo.

Alguém pode me ajudar nessa empreitada?

Dese já agradeço.

Sei que é feriado, mas estou precisando muito desta ajuda.

            //Cabeçalho das colunas
            DatabaseMetaData dbmd = rs.getStatement().getConnection().getMetaData();
            ResultSet rsParametrosColunas = dbmd.getColumns(rs.getStatement().getConnection().getCatalog(),
                    null,
                    rs.getMetaData().getTableName(1),
                    "%");
            
            Vector colunas = new Vector();
            while (rsParametrosColunas.next()) {
                Vector parametrosColunas = new Vector();
                
                for (int i = 1; i <= rsParametrosColunas.getMetaData().getColumnCount(); i++) {
                    parametrosColunas.addElement(rsParametrosColunas.getObject(rsParametrosColunas.getMetaData().getColumnName(i)));
                }
                
                colunas.addElement(parametrosColunas);
            }

Achei esse exemplo aqui, mas não faz o que desejo, ou melhor, o que preciso.

// 
//	Exemplo que lista todas as tableas do BD onde foi feita a conexao
//  tambem lista, para cada tabela, quais as chaves estrangeiras que possui e quem possui
//	chave estrangeira para ela.
//	
//  By Jomi
//

import java.sql.*;
import java.util.*;


class DBMetaData {
	Connection connection;
	Connection connectionOut;
	DatabaseMetaData dbmd;
	Statement stmt;
	Statement stmtOut;

	// Valores para acessar ODBC
	//
	// obs.: no ODBC nao consegui pegar as informacoes de chaves estrangeiras!
	String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
	String conecao = "jdbc:odbc:sabio";
	String user = "dba";
	String senha = "sql";

	String conecaoOut = "jdbc:odbc:teste";


	// Valores para acessar Oracle
	//
	//String driver = "oracle.jdbc.driver.OracleDriver";
	//String conecao = "jdbc:oracle:thin:@mariscal.inf.furb.rct-sc.br:1521:ORAP";
	//String user = "bdm01";
	//String senha = "bdm01";


	public static void main (String args [])
	{
		new DBMetaData().teste();
	}



	DBMetaData() {
		try	{
		    Class.forName (driver);

			connection = DriverManager.getConnection (conecao, user, senha);
			dbmd = connection.getMetaData();
			stmt = connection.createStatement();

			connectionOut = DriverManager.getConnection (conecaoOut, user, senha);
			stmtOut = connectionOut.createStatement();
		} catch (Exception e) {
			System.out.println("Erro "+e);
		}
  	}

	void teste() {
		Vector tabs = getAllTables();

		Enumeration e = tabs.elements();
		while (e.hasMoreElements()) {
			String tab = (String) e.nextElement();

			String create = getCreateTable(tab);
			//System.out.println(create);
			criaTab( tab, create) ;

			//System.out.println("   Pais\n ");
			//getTabsPai( tab );

			//System.out.println("   Filhos\n ");
			//getTabsFilho( tab ) ;
		}

		e = tabs.elements();
		while (e.hasMoreElements()) {
			String tab = (String) e.nextElement();
			inclui(tab);
		}
	}


	// retorna o nome de todas as tabelas do BD
	//
	Vector getAllTables() {
		Vector tabelas = new Vector();
		try	{
			String[] tipos = new String[1];
			tipos[0] = "TABLE";

			ResultSet rs = dbmd.getTables(null, null, "%", tipos);
			ResultSetMetaData rsmd = rs.getMetaData();
			int cols = rsmd.getColumnCount();
			
			// imprime as seguintes colunas: Catalogo, Schema, nome, tipo, comantario
			while (rs.next()) {
				tabelas.addElement( rs.getString(3));
			}

		} catch (Exception e) {
			System.err.println("Erro "+e);
		}
		return tabelas;
  	}


	void criaTab( String tab, String comando) {
		System.out.println("Criando "+tab);
		try	{
			try	{
				stmtOut.executeUpdate( "drop table "+tab);
			} catch (Exception e) {	}

			stmtOut.executeUpdate( comando);
		} catch (Exception e) {
			System.err.println("Erro criando \n"+comando+"\n"+e);
		}
	}

	
	void inclui(String tab) {
		// geral os comandos insert
		System.out.println("inclindo em "+tab);
		try	{
			ResultSet rs = stmt.executeQuery("select * from "+tab);
			ResultSetMetaData rsmd = rs.getMetaData();
			int cols = rsmd.getColumnCount();
			while (rs.next()) {
				StringBuffer res = new StringBuffer();
				res.append("insert into "+tab+" values (");
				String virg = "";
				for (int i=1;i<=cols;i++) {
					String val = rs.getString(i);
					if (val == null)
						val = "";
					res.append(virg+" '"+val+"'");
					virg = ",";
				}
				res.append(")");

				//System.out.println(res.toString());
				stmtOut.executeUpdate(res.toString());
			}
		} catch (Exception e) {
			System.err.println("Erro incluindo "+e);
		}
	}


	String getCreateTable(String tab) {
		StringBuffer res = new StringBuffer();
		res.append("create table "+tab + " (\n");
		res.append(getCols(tab));
		//res.append(printPrimaryKey(tab));
		res.append("\n);");
		return res.toString();
	}


	String getCols(String tab) {
		StringBuffer res = new StringBuffer();

		try	{
			ResultSet rs = dbmd.getColumns(null, null, tab, "%");

			//ResultSetMetaData rsmd = rs.getMetaData();
			//int cols = rsmd.getColumnCount();
			//for (int i=1;i<=cols;i++) {
			//	System.out.println("\t"+i+"="+rsmd.getColumnName(i)+":"+rsmd.getColumnTypeName(i));
			//}

			boolean primeiraVez = true;
			while (rs.next()) {
				if (!primeiraVez){
					res.append(",\n");
				}
				primeiraVez = false;

				String tp = rs.getString(6);
				res.append("\t"+rs.getString(4)+"\t"+  // nome da coluna
                                tp);  // tipo SQL

				if (tp.equalsIgnoreCase("char"))	{ // char
					res.append("("+rs.getString(8)+") ");  // tamanho
				}

				if (rs.getInt(11) == 0) {// pode ser null
					res.append(" not null ");
				}
			}
			res.append("\n");

		} catch (Exception e) {
			System.err.println("Erro "+e);
		}
		return res.toString();
	}

	// Retorna o nome de todas as tabelas para as quais o parametro tem 
	String printPrimaryKey(String tab) {
		StringBuffer res = new StringBuffer();
		boolean primeiraVez = true;
		try	{
			ResultSet rs = dbmd.getPrimaryKeys(null, null, tab);

			res.append("\t, primary key (");
			while (rs.next()) {
				if (!primeiraVez){
					res.append(", ");
				}
				primeiraVez = false;

				res.append(rs.getString(4));  // nome da coluna
			}
			res.append(") \n");

		} catch (Exception e) {
			System.err.println("Erro "+e);
		}
		if (primeiraVez)
			return "";
		else
			return res.toString();
	}


	// chave estrangeira
	//
	void getTabsPai(String tabela) {
		try	{
			ResultSet rs = dbmd.getImportedKeys(null,null,tabela); // tabelas que eu aponto - tenho chave estrangeira

			ResultSetMetaData rsmd = rs.getMetaData();
			int cols = rsmd.getColumnCount();
			
			while (rs.next()) {
				for (int i=1;i<=cols;i++) {
					System.out.println("\t"+rsmd.getColumnName(i)+"=\t"+rs.getString(i));
				}
				System.out.println("");
			}

		} catch (Exception e) {
			System.err.println("Erro "+e);
		}
	}

	void getTabsFilho(String tabela) {
		try	{
			ResultSet rs = dbmd.getExportedKeys(null,null,tabela); // quem tem chave estrangeira para mim

			ResultSetMetaData rsmd = rs.getMetaData();
			int cols = rsmd.getColumnCount();
			
			while (rs.next()) {

				for (int i=1;i<=cols;i++) {
					System.out.println("\t"+rsmd.getColumnName(i)+"=\t"+rs.getString(i));
				}
				System.out.println("");
			}

		} catch (Exception e) {
			System.err.println("Erro "+e);
		}
	}


}