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);
}
}
}