JDBC e SQL

07/08/2005

1

Saudações a todos os colegas do mundo Java. Estou procurando ajuda sobre a utilização dessa API. Mais precisamente, consegui fazer a conexão com uma base de dados através dessa API, e agora gostaria de saber como proceder a visualização das Tabelas existentes na fonte de dados a qual me conectei. Gostaria de, por exemplo, listar as tabelas existentes, após isso, listar os atributos da tabela selecionada e os registros da tabela.

Alguém pode me ajudar?

Grato


Responder

Posts

[quote:aa36b7333c=´isandro azedo´]Saudações a todos os colegas do mundo Java. Estou procurando ajuda sobre a utilização dessa API. Mais precisamente, consegui fazer a conexão com uma base de dados através dessa API, e agora gostaria de saber como proceder a visualização das Tabelas existentes na fonte de dados a qual me conectei. Gostaria de, por exemplo, listar as tabelas existentes, após isso, listar os atributos da tabela selecionada e os registros da tabela.

Alguém pode me ajudar?

Grato[/quote:aa36b7333c]
Pra pegar informações do banco você vai precisar de um objeto DatabaseMetadata:

[url]http://java.sun.com/j2se/1.5.0/docs/api/java/sql/DatabaseMetaData.html[/url]

Ele pode ser conseguido a partir de qualquer objeto ResultSet que você tenha conectado ao banco.


Responder

09/08/2005

Isandro Azedo

[quote:790c455d72=´isandro azedo´]Saudações a todos os colegas do mundo Java. Estou procurando ajuda sobre a utilização dessa API. Mais precisamente, consegui fazer a conexão com uma base de dados através dessa API, e agora gostaria de saber como proceder a visualização das Tabelas existentes na fonte de dados a qual me conectei. Gostaria de, por exemplo, listar as tabelas existentes, após isso, listar os atributos da tabela selecionada e os registros da tabela. Alguém pode me ajudar? Grato

Pra pegar informações do banco você vai precisar de um objeto DatabaseMetadata:

[url]http://java.sun.com/j2se/1.5.0/docs/api/java/sql/DatabaseMetaData.html[/url]

Ele pode ser conseguido a partir de qualquer objeto ResultSet que você tenha conectado ao banco.[/quote:790c455d72]

Obrigado pela ajuda, já estou iniciando os testes. Gostaria de saber, no entanto, se eu posso implementar isso de uma maneira mais fácil, visualmente, como no delphi. Atualmente eu estou utilizando o NetBeans, ou seja, programando tudo.


Responder
Rapaz, se você tá procurando por desenvolvimento RAD, é melhor continuar com o Delphi. Em Java nós não costumamos trabalhar com isso.


Responder

15/08/2005

Isandro Azedo

Rapaz, se você tá procurando por desenvolvimento RAD, é melhor continuar com o Delphi. Em Java nós não costumamos trabalhar com isso.


Ok, mas por exemplo.

Criei um DatabaseMetaData para recuperar o metadado

DatabaseMetaData metaData = conexao.getMetaData();

Eu só gostaria de saber como eu faço pra imprimir, por exemplo, os nomes das tabelas existentes no catálogo, ou seja, na base.

O nome do catalogo eu peguei assim:

String catalogo = conexao.getCatalog();

grato pela ajuda


Responder
Assim você pega todas:


DatabaseMetaData metaData = conexao.getMetaData(); 
ResultSet resultSet = metaData.getTables(null, null, "¬", null);



Veja os outros métodos da interface DatabaseMetaData que eles oferecem praticamente todas as informações sobre o banco.


Responder

15/08/2005

Isandro Azedo

Assim você pega todas:

DatabaseMetaData metaData = conexao.getMetaData(); 
ResultSet resultSet = metaData.getTables(null, null, "¬", null);

Veja os outros métodos da interface DatabaseMetaData que eles oferecem praticamente todas as informações sobre o banco.


Muito obrigado pela ajuda, você realmente está me ajudando muito. Mas se não for pedir muito, você pode me dizer como que eu imprimo os nomes das tabelas a partir disso? Eu dei uma olhada nos outros métodos da interface, mas não encontrei algo.


Responder
Pra imprimir os nomes das tabelas você vai ter que pegar os campos do ResultSet, do mesmo jeito que você faria se isso fosse um select normal.

Tem um ótimo material de JDBC aqui:[url]http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/index.html[/url]


Responder

18/08/2005

Isandro Azedo

Pra imprimir os nomes das tabelas você vai ter que pegar os campos do ResultSet, do mesmo jeito que você faria se isso fosse um select normal. Tem um ótimo material de JDBC aqui:[url]http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/index.html[/url]


Ok, tentei, mas não consegui. O seguinte trecho de código mostra o que eu tentei fazer para imprimir as tabelas:

DatabaseMetaData metaData = conexao.getMetaData(); (peguei MetaData da conexao)

ResultSet tabelas = metaData.getTables(null, null, ´¬´, null); (peguei as tabelas e atribui seu valor ao resultset tabelas)

ResultSetMetaData resultMetaData = tabelas.getMetaData(); (peguei MetaData do resultset tabelas)

int count = resultMetaData.getColumnCount(); (peguei o número de resultados e atribuí à varável count para ser utilizada pra percorrer o resultado)

for(int i=1;i<=count;i++){
nomeTabela = tabelas.getString(i);
}

Mensagem de erro:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Estado de cursor inválido
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5699)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)
at classes.database.Source.obterTabelas(Source.java:55)
at classes.database.SourceTest.main(SourceTest.java:28)


Responder

18/08/2005

Isandro Azedo

[quote:d8768d3f8a=´isandro azedo´]
Pra imprimir os nomes das tabelas você vai ter que pegar os campos do ResultSet, do mesmo jeito que você faria se isso fosse um select normal. Tem um ótimo material de JDBC aqui:[url]http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/index.html[/url]


Ok, tentei, mas não consegui. O seguinte trecho de código mostra o que eu tentei fazer para imprimir as tabelas:

DatabaseMetaData metaData = conexao.getMetaData(); (peguei MetaData da conexao)

ResultSet tabelas = metaData.getTables(null, null, ´¬´, null); (peguei as tabelas e atribui seu valor ao resultset tabelas)

ResultSetMetaData resultMetaData = tabelas.getMetaData(); (peguei MetaData do resultset tabelas)

int count = resultMetaData.getColumnCount(); (peguei o número de resultados e atribuí à varável count para ser utilizada pra percorrer o resultado)

for(int i=1;i<=count;i++){
nomeTabela = tabelas.getString(i);
}

Mensagem de erro:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Estado de cursor inválido
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5699)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)
at classes.database.Source.obterTabelas(Source.java:55)
at classes.database.SourceTest.main(SourceTest.java:28)[/quote:d8768d3f8a]

Depois eu modifiquei o for, mudando o conteúdo para:

nomeTabela = resultMetaData.getTableName(i);

Mesmo assim deu o mesmo erro.

O que acontece?


Responder

18/08/2005

Isandro Azedo

[quote:77bfcae9d4=´isandro azedo´][quote:77bfcae9d4=´isandro azedo´]
Pra imprimir os nomes das tabelas você vai ter que pegar os campos do ResultSet, do mesmo jeito que você faria se isso fosse um select normal. Tem um ótimo material de JDBC aqui:[url]http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/index.html[/url]


Ok, tentei, mas não consegui. O seguinte trecho de código mostra o que eu tentei fazer para imprimir as tabelas:

DatabaseMetaData metaData = conexao.getMetaData(); (peguei MetaData da conexao)

ResultSet tabelas = metaData.getTables(null, null, ´¬´, null); (peguei as tabelas e atribui seu valor ao resultset tabelas)

ResultSetMetaData resultMetaData = tabelas.getMetaData(); (peguei MetaData do resultset tabelas)

int count = resultMetaData.getColumnCount(); (peguei o número de resultados e atribuí à varável count para ser utilizada pra percorrer o resultado)

for(int i=1;i<=count;i++){
nomeTabela = tabelas.getString(i);
}

Mensagem de erro:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Estado de cursor inválido
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5699)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)
at classes.database.Source.obterTabelas(Source.java:55)
at classes.database.SourceTest.main(SourceTest.java:28)[/quote:77bfcae9d4]

Depois eu modifiquei o for, mudando o conteúdo para:

nomeTabela = resultMetaData.getTableName(i);

Mesmo assim deu o mesmo erro.

O que acontece?[/quote:77bfcae9d4]

Novamente aqui estou, pra descrever a última tentativa:

DatabaseMetaData bd_MetaData = conexao.getMetaData;
ResultSet tabelas = bd_MetaData.getTables(null, null, ´¬´, null);
ResultSetMetaData resultMetaData = tabelas.getMetaData();
int count=resultMetaData.getColumnCount();

for(int i=1;i<=count;i++){
nomeTabela = resultMetaData.getTableName(i);
areaTabelas.append(nomeTabela+´\n´);
}

Nesse trecho não houve erro, entretanto a impressão saiu em branco, ou seja, nenhum resultado. Até parece que não existem tabelas, mas a base de dados referida é a base exemplo Pubs do SQL Server.


Responder
[quote:0edd7c78a7=´isandro azedo´]
int count = resultMetaData.getColumnCount(); (peguei o número de resultados e atribuí à varável count para ser utilizada pra percorrer o resultado)[/quote:0edd7c78a7]

Veja o nome do método, você está pegando a quantidade de colunas, não a quantidade de linhas do result set. Dê uma lidinha no tutorial, vai ajudar muito mais.


Responder

23/08/2006

Goncaze

[b:7db7fb861f]Olha, deixa ver se eu posso ajudar. [/b:7db7fb861f]

// pega as tabelas do banco
ResultSet rsTabela = dbmd.getTables(null, null, ´¬´, null);

// out tabelas
while( rsTabela.next() ){
System.out.println(´\n Tabelas = ´ + rsTabela.getString(3));
}

[b:7db7fb861f]repare aquele nº 3, é ele o índice que imprimiu minhas tabelas no mysql, talvez vc também consiga assim. Pra acabar c/ qualquer dúvida vou mandar meu código por inteiro tá bom.[/b:7db7fb861f]

import java.sql.*;

public class Exemplo1 {
public static void main(String[] args) throws SQLException {

// registrar o Driver JDBC do banco de dados, neste caso estou usando o da Oracle
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

// String de conexao para uma base Oracle
Connection conn = DriverManager.getConnection(´jdbc:mysql://localhost:3306/bdteste´);

// recuperar a classe DatabaseMetadaData a partir da conexao criada
DatabaseMetaData dbmd = conn.getMetaData();

System.out.println ( ´Versao do Driver JDBC = ´+ dbmd.getDriverVersion());
System.out.println ( ´Versao do Banco de Dados = ´+ dbmd.getDatabaseProductVersion());
System.out.println ( ´Suporta Select for Update? = ´+ dbmd.supportsSelectForUpdate());
System.out.println ( ´Suporta Transacoes? = ´+ dbmd.supportsTransactions());
System.out.println ( ´\n\n Catalogo? = ´+ conn.getCatalog() + ´\n´);

// pega as tabelas do banco
ResultSet rsTabela = dbmd.getTables(null, null, ´¬´, null);

// out tabelas
while( rsTabela.next() ){
System.out.println(´\n Tabelas = ´ + rsTabela.getString(3));
}


// retornar todos os schemas(usuarios) do Banco de Dados
ResultSet r2 = dbmd.getSchemas();
while (r2.next()) {
System.out.println(´saco SCHEMA DO BD = ´ + r2.getString(1));
}
}
}


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira