Bom dia estou quebrando a cabeça para descobrir como fazer um pequeno método em java que receba o nome de uma tabela e imprima os metadados (nome de colunas, tipo de colunas, comentário etc.) da tabela. Se alguém puder me ajudar, já crie o banco, fiz a classe de conexão com o mesmo, testei e está conectado.
Dúvida JDBC
4 Respostas
Opa, beleza maninho?
Creio que o método getMetaData() da interface ResultSet pode te ajudar.
Ele retorna um ResultSetMetaData, que fornece a maioria dessas informações que você precisa.
abraços!
Valeu man, só estou precisando testar. Dá uma olhada no código e vê me diz onde preciso colocar o método main pra testar, um abraço.
public class MetadadosJDBC {
private Connection conn;
public MetadadosJDBC() throws SQLException{
this.conn = ConnectionFactory.getConnection();
}
public void retornarMetadados() throws SQLException {
PreparedStatement stmt = (PreparedStatement) conn.createStatement();
// Select da tabela a ser analizada
ResultSet rset = stmt.executeQuery("SELECT * from contatos ");
ResultSetMetaData rsmd = rset.getMetaData();
// numero total de colunas
int numColumns = rsmd.getColumnCount();
System.out.println("Total de Colunas = " + numColumns);
// impressão dos metadados…
for (int i=0; i<numColumns; i++) {
System.out.print(“Nome da Coluna =” + rsmd.getColumnName (i + 1));
System.out.print(" Tipo =" + rsmd.getColumnType (i + 1) );
System.out.print(" Nome do Tipo =" + rsmd.getColumnTypeName (i + 1));
System.out.print(" Tamanho =" + rsmd.getColumnDisplaySize (i + 1));
}
}
Fiz uma classe de Conexão com o banco separada, essa abaixo, mas não estou conseguindo imprimir, pois precisa do man e não sei onde colocar. Valeu brother!!!
package appl.factory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public static Connection getConnection() throws SQLException {
try {
Class.forName(“org.postgresql.Driver”);
String url = “jdbc:postgresql://localhost/Agenda”;
String usr = “postgres”;
String pss = “postgres”;
return DriverManager.getConnection(url, usr, pss);
} catch (ClassNotFoundException e){
throw new SQLException(e.getMessage());
}
}
}
opa, pode colocar o main na sua primeira classe, assim:
public class MetadadosJDBC {
private Connection conn;
public MetadadosJDBC() throws SQLException{
this.conn = ConnectionFactory.getConnection();
}
public static void main(String[] a){
try{
MetadadosJDBC meta = new MetadadosJDBC();
meta.retornarMetadados();
}
catch(Exception e){
e.printStackTrace();
}
}
public void retornarMetadados() throws SQLException {
PreparedStatement stmt = (PreparedStatement) conn.createStatement();
// Select da tabela a ser analizada
ResultSet rset = stmt.executeQuery("SELECT * from contatos ");
ResultSetMetaData rsmd = rset.getMetaData();
// numero total de colunas
int numColumns = rsmd.getColumnCount();
System.out.println("Total de Colunas = " + numColumns);
// impressão dos metadados...
for (int i=0; i<numColumns; i++) {
System.out.print("Nome da Coluna =" + rsmd.getColumnName (i + 1));
System.out.print(" Tipo =" + rsmd.getColumnType (i + 1) );
System.out.print(" Nome do Tipo =" + rsmd.getColumnTypeName (i + 1));
System.out.print(" Tamanho =" + rsmd.getColumnDisplaySize (i + 1));
}
}
}
abraços!
Muito obrigado brother, ajudou muito. Valeu!!!