JDBC e SQL
07/08/2005
0
Alguém pode me ajudar?
Grato
Isandro Azedo
Posts
08/08/2005
Mauricio.linhares
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.
09/08/2005
Isandro Azedo
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.
09/08/2005
Mauricio.linhares
15/08/2005
Isandro Azedo
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
15/08/2005
Mauricio.linhares
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.
15/08/2005
Isandro Azedo
DatabaseMetaData metaData = conexao.getMetaData(); ResultSet resultSet = metaData.getTables(null, null, "¬", null);
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.
18/08/2005
Mauricio.linhares
Tem um ótimo material de JDBC aqui:[url]http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/index.html[/url]
18/08/2005
Isandro Azedo
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)
18/08/2005
Isandro Azedo
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?
18/08/2005
Isandro Azedo
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.
23/08/2005
Mauricio.linhares
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.
23/08/2006
Goncaze
// 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));
}
}
}
Clique aqui para fazer login e interagir na Comunidade :)