Ajuda com JDBC

5 respostas
alexvingg

Pessoal,
estou com um problema ... estou mapeando meu banco por jdbc pego metadata e verifico as tabelas vejos as chaves primarias estrangeiras e etc...
o problema que estou tendo é para identificar se a tabela é associativa. Eu fiz até uma verificação mais não garante nem 40% ele verifica se
a tabela associativa tem 3 ou 2 campos se tiver ele verifica se existe duas FK nela ai ele define como tabela associativa. Preciso de uma maneira
que me de mais segurança ! Valeu

O código que eu fiz foi esse:

public boolean verificaAssociativa(String nomeTabela)
    {

        DatabaseMetaData metadata;
        ResultSet rs;
        int contadorAtributos = 0;
        int contadorChaveFK = 0;
        try {
            getConexao().openConnection();
            metadata = getConexao().getConnection().getMetaData();
            rs = metadata.getColumns(null, null, nomeTabela, "%");
            while (rs.next()) {
                contadorAtributos++;
            }
            if (contadorAtributos == 2 || contadorAtributos == 3) {
                rs = metadata.getImportedKeys(getConexao().getConnection().getCatalog(), null, nomeTabela);
                while (rs.next()) {
                    contadorChaveFK++;
                }
                rs.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            getConexao().closeConnection();
        }
        if (contadorChaveFK == 2) {
            return true;
        }
        return false;
    }

5 Respostas

alexvingg

niguem pra dar esse help ? rsrsrs
eu estou desenvolvendo um projeto que ele vai ler o banco de dados
criar suas classes já mapeadas para o uso do play framework.

drsmachado

Tudo bem que caso o DBA (ou o equivalente) tenha criado as tabelas como manda o padrão, essa busca por mais de uma FK seja relevante.
Mas, e caso ele não tenha feito isso?
Se ele apenas criou as tabelas, colocou lá 2 colunas que recebem informações de colunas de outras tabelas, como vai fazer?
E, se for uma tabela normal, que tem relacionamento 1 : 1 com outras tabelas (mais de uma)?

alexvingg

esse é um grande problema, mais como eu estou desenvolvendo posso definir regras para a criação dessas tabelas sei lá, o intuito desse projeto é vc criar cruds básicos sem escrever uma linha de código como exemplo temos o cake php q tem um gerador de model control e view. Estou fazendo um para o playframework e meu problema agora é a criação dos models, pois meu controller e minha view já estão funcionando se vocẽ criar seu model na mão.

Já estou fazendo algumas verificações e tals agora eu preciso de um método que verifique se a tabela é associativa mais eficaz.
quando executo ele já ta funcionando dessa maneira:

Carregando as informações do arquivo !
Carregando as informações do arquivo !
Tabela:[0] analistas
Tabela:[1] cargos
Tabela:[2] projetos
Tabela:[3] requisitos
Digite a opção:
0
serial :id
varchar :nome
int4 :cargo_id
bool :ativo
Existe a chave estrangeira cargo_id da tabela: cargos
Deseja criar a relação ManyToOne ? S ou N
s
A chave primária é referenciada na tabela analistas_projetos com o campo analista_id
analistas_projetos é uma possível tabela associativa deseja criar uma anotação ManyToMany entre ela e analistas (S ou N)
s
Qual o outro campo que faz chave com a tabela?

Campo: [0] id
Campo: [1] projeto_id

null
public
analistas
id
null
public
analistas_projetos

PK-true
TYPE-serial
FIELD-id
PK-false
TYPE-bool
FIELD-ativo
PK-false
Annotation:@ManyToOne(fetch = FetchType.LAZY)
Annotation:@JoinColumn(name =cargo_id)
TYPE-int4
FIELD-cargo_id
PK-false
TYPE-varchar
FIELD-nome

drsmachado

Você quer dizer que pretende fazer algo como o rake db:create:all e scaffold do rails?
Bem, se a questão é apenas criar os bancos no momento de gerar um CRUD, você não tem problemas. A questão está em criar relacionamentos a partir de um banco criado e tabelas existentes.

alexvingg

Isso mesmo ! O problema é que o banco já vai ter que está criado, quando eu criar um projeto play eu vou configurar o aplication.conf com as configurações do banco de dados e irei rodar minha aplicação separada que vai gerar o model, controller e as views… diferente do scaffold, o play tem tb só é usar exdend crud no meu controller que ele já identifica o problema é que eu preciso modificar paginas individualmente e usando o scaffold pelo o que eu vi e pesquisei é dificil.

Criado 11 de maio de 2011
Ultima resposta 12 de mai. de 2011
Respostas 5
Participantes 2