Dúvida JDBC

4 respostas
Caveira

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.

4 Respostas

Luiz_Gustavo

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!

Caveira

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

}

}

}
Luiz_Gustavo

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!

Caveira

Muito obrigado brother, ajudou muito. Valeu!!!

Criado 19 de maio de 2008
Ultima resposta 20 de mai. de 2008
Respostas 4
Participantes 2