Página Inicial do Fórum > Banco de Dados - JDBC / SQL

Porque não usar DefaultTableModel?


Goto page 1


New Topic    Reply Message


  1. 13alemao
    Offline
    Posts: 54

    Comment Arrow

    Publicado em: 27/07/2012 09:34:50

    Bom dia,
    estava pesquisando sobre DefaultTableModel, e li muito dizendo para não o usar, ao invéz disso criar meu próprio TableModel. Isso prq dizem que o DefaulTableMode é custoso à desempenho, e um código que pode ficar muito dificil de manter.
    meuTableModel tem quer ser um List de objetos de Clientes por exemplo.

    A minha dúvia é, em uma seleção de clientes por exemplo, retorna muitos dados. colocar os dados de cada cliente retornado em um objeto, isso não é muito custoso em relação à desempenho? para programar é uma teta!

    me deem uma luz por favor, estou perdido e parado com isso.
    grato pela atenção, abraço.
    _________________
    Estudante de Sistemas de Informação FIPP-Unoeste 7º Termo
    Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seus poderes ultrapassam os limites da imaginação.
    - Albert Einstein




  1. simu
    Offline
    Posts: 9410

    Comment Arrow

    Publicado em: 27/07/2012 10:20:27

    13alemao:
    Bom dia,
    estava pesquisando sobre DefaultTableModel, e li muito dizendo para não o usar, ao invéz disso criar meu próprio TableModel. Isso prq dizem que o DefaulTableMode é custoso à desempenho, e um código que pode ficar muito dificil de manter.
    meuTableModel tem quer ser um List de objetos de Clientes por exemplo.

    A minha dúvia é, em uma seleção de clientes por exemplo, retorna muitos dados. colocar os dados de cada cliente retornado em um objeto, isso não é muito custoso em relação à desempenho? para programar é uma teta!

    me deem uma luz por favor, estou perdido e parado com isso.
    grato pela atenção, abraço.



    Eu discordo dessa afirmação de não usar o DefaultTableModel.
    Se ele faz exatamente o que for necessário, eu o uso!

    mas, por outro lado, é bastante fácil criar uma classe estendendo o AbstractTableModel. Quando comecei a fazer isso fiquei surpreso por ser mais simples do tinha pensado e, principalmente, por ficar muito fácil adaptar ele conforme desejado - algumas coisas acabaram funcionando quase que por sozinho...

    Uma grande razão para não usar o DTM é quando o seu programa necessita armazenar os dados numa estrutura próprio causando a duplicação dos dados: sua estrutura e dentro do DTM.

    Mas como eu disse, se ele fizer o que for necessário e não tiver que usar uma estrutura adicional para armazenar os dados, pode usar o DefaultTableModel!

    Tudo EMO!
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. 13alemao
    Offline
    Posts: 54

    Comment Arrow

    Publicado em: 27/07/2012 10:30:47

    simu:
    13alemao:
    Bom dia,
    estava pesquisando sobre DefaultTableModel, e li muito dizendo para não o usar, ao invéz disso criar meu próprio TableModel. Isso prq dizem que o DefaulTableMode é custoso à desempenho, e um código que pode ficar muito dificil de manter.
    meuTableModel tem quer ser um List de objetos de Clientes por exemplo.

    A minha dúvia é, em uma seleção de clientes por exemplo, retorna muitos dados. colocar os dados de cada cliente retornado em um objeto, isso não é muito custoso em relação à desempenho? para programar é uma teta!

    me deem uma luz por favor, estou perdido e parado com isso.
    grato pela atenção, abraço.



    Eu discordo dessa afirmação de não usar o DefaultTableModel.
    Se ele faz exatamente o que for necessário, eu o uso!

    mas, por outro lado, é bastante fácil criar uma classe estendendo o AbstractTableModel. Quando comecei a fazer isso fiquei surpreso por ser mais simples do tinha pensado e, principalmente, por ficar muito fácil adaptar ele conforme desejado - algumas coisas acabaram funcionando quase que por sozinho...

    Uma grande razão para não usar o DTM é quando o seu programa necessita armazenar os dados numa estrutura próprio causando a duplicação dos dados: sua estrutura e dentro do DTM.

    Mas como eu disse, se ele fizer o que for necessário e não tiver que usar uma estrutura adicional para armazenar os dados, pode usar o DefaultTableModel!

    Tudo EMO!



    valeu cara, eu já usava o DTM, nunca vi problema algum nos meus casos de uso, somente tive algumas dificuldades em implementar algo.
    Agora que conheci, eu acho melhor criar meuTableModel vai ser muito mais simples.
    Será que o sistema terá menos desempenho com isso cara?

    valeu a atenção.

    _________________
    Estudante de Sistemas de Informação FIPP-Unoeste 7º Termo
    Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seus poderes ultrapassam os limites da imaginação.
    - Albert Einstein




  1. simu
    Offline
    Posts: 9410

    Comment Arrow

    Publicado em: 27/07/2012 11:43:12

    13alemao:
    simu:

    [...]



    valeu cara, eu já usava o DTM, nunca vi problema algum nos meus casos de uso, somente tive algumas dificuldades em implementar algo.
    Agora que conheci, eu acho melhor criar meuTableModel vai ser muito mais simples.
    Será que o sistema terá menos desempenho com isso cara?

    valeu a atenção.



    se não fizer um erro grave, o seu TableModel não vai ter desempenho pior, provavelmente vai ser melhor que o DTM... mas desempenho somente deve ser considerado em caso de problemas com ele...
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. 13alemao
    Offline
    Posts: 54

    Comment Arrow

    Publicado em: 27/07/2012 11:54:19

    simu:
    13alemao:
    simu:

    [...]



    valeu cara, eu já usava o DTM, nunca vi problema algum nos meus casos de uso, somente tive algumas dificuldades em implementar algo.
    Agora que conheci, eu acho melhor criar meuTableModel vai ser muito mais simples.
    Será que o sistema terá menos desempenho com isso cara?

    valeu a atenção.



    se não fizer um erro grave, o seu TableModel não vai ter desempenho pior, provavelmente vai ser melhor que o DTM... mas desempenho somente deve ser considerado em caso de problemas com ele...



    Ótimo saber disso, da uma olhada no codigo que fiz, copieui um pronto.
    Fica muito tranquilo de usar.
    Valeu pe ajuda, abraço.

    _________________
    Estudante de Sistemas de Informação FIPP-Unoeste 7º Termo
    Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seus poderes ultrapassam os limites da imaginação.
    - Albert Einstein




  1. simu
    Offline
    Posts: 9410

    Comment Arrow

    Publicado em: 27/07/2012 16:20:21

    13alemao:
    simu:

    [...]



    Ótimo saber disso, da uma olhada no codigo que fiz, copieui um pronto.
    Fica muito tranquilo de usar.
    Valeu pe ajuda, abraço.



    acho que eu não faria diferente.
    O que eventualmente (dificilmente?) pode dar dor de cabeça é a falta de sincronização da lista. Se os dados somente forem manipulados dentro da Thread da GUI, não vai ser problema... e mesmo caso contrário, vai ser difícil perceber algum erro.
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. paulinho!!!
    Offline
    Posts: 2

    Comment Arrow

    Publicado em: 27/07/2012 16:33:39


    Ei... você está usando DefaultTableModel no seu projeto??
    Não faça isso!
    DefaultTableModel é a implementação concreta padrão de TableModel usada por JTable quando nenhum modelo é especificado no construtor. Esta classe uma um Vector de Vectors para gerenciar seus dados, o que torna a implementação de AbstractTableModel uma escolha mais adequada (AbstractTableModel permite controle completo sobre como a armazenagem e manipulação dos dados são implementadas). Este Vector pode ser atribuido com o método sobrecarregado setDataVector(), e obtido com o método getDataVector(). Internamente, dois métodos convertToVector() sobrecarregados e protegidos são usados para converter matrizes de Object em Vectors quando linhas e colunas são adicionadas ou um novo Vector é atribuido. Métodos para adição, inserção, exclusão, mover colunas e linhas de dados também são fornecidos



    1. É mais difícil que escrever seu próprio TableModel;
    2. É mais lento (usa classes sincronizadas);
    3. Ocupa mais espaço em memória (duplica seus dados);
    4. Deixa o código mais confuso e difícil de manter;
    5. Usa casts inseguros;
    6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
    7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

    simu:
    13alemao:
    Bom dia,
    estava pesquisando sobre DefaultTableModel, e li muito dizendo para não o usar, ao invéz disso criar meu próprio TableModel. Isso prq dizem que o DefaulTableMode é custoso à desempenho, e um código que pode ficar muito dificil de manter.
    meuTableModel tem quer ser um List de objetos de Clientes por exemplo.

    A minha dúvia é, em uma seleção de clientes por exemplo, retorna muitos dados. colocar os dados de cada cliente retornado em um objeto, isso não é muito custoso em relação à desempenho? para programar é uma teta!

    me deem uma luz por favor, estou perdido e parado com isso.
    grato pela atenção, abraço.



    Eu discordo dessa afirmação de não usar o DefaultTableModel.
    Se ele faz exatamente o que for necessário, eu o uso!

    mas, por outro lado, é bastante fácil criar uma classe estendendo o AbstractTableModel. Quando comecei a fazer isso fiquei surpreso por ser mais simples do tinha pensado e, principalmente, por ficar muito fácil adaptar ele conforme desejado - algumas coisas acabaram funcionando quase que por sozinho...

    Uma grande razão para não usar o DTM é quando o seu programa necessita armazenar os dados numa estrutura próprio causando a duplicação dos dados: sua estrutura e dentro do DTM.

    Mas como eu disse, se ele fizer o que for necessário e não tiver que usar uma estrutura adicional para armazenar os dados, pode usar o DefaultTableModel!

    Tudo EMO!




  1. paulinho!!!
    Offline
    Posts: 2

    Comment Arrow

    Publicado em: 27/07/2012 16:36:00

    paulinho!!!:

    Ei... você está usando DefaultTableModel no seu projeto??
    Não faça isso!
    DefaultTableModel é a implementação concreta padrão de TableModel usada por JTable quando nenhum modelo é especificado no construtor. Esta classe uma um Vector de Vectors para gerenciar seus dados, o que torna a implementação de AbstractTableModel uma escolha mais adequada (AbstractTableModel permite controle completo sobre como a armazenagem e manipulação dos dados são implementadas). Este Vector pode ser atribuido com o método sobrecarregado setDataVector(), e obtido com o método getDataVector(). Internamente, dois métodos convertToVector() sobrecarregados e protegidos são usados para converter matrizes de Object em Vectors quando linhas e colunas são adicionadas ou um novo Vector é atribuido. Métodos para adição, inserção, exclusão, mover colunas e linhas de dados também são fornecidos

    1. É mais difícil que escrever seu próprio TableModel;
    2. É mais lento (usa classes sincronizadas);
    3. Ocupa mais espaço em memória (duplica seus dados);
    4. Deixa o código mais confuso e difícil de manter;
    5. Usa casts inseguros;
    6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
    7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

    simu:
    13alemao:
    Bom dia,
    estava pesquisando sobre DefaultTableModel, e li muito dizendo para não o usar, ao invéz disso criar meu próprio TableModel. Isso prq dizem que o DefaulTableMode é custoso à desempenho, e um código que pode ficar muito dificil de manter.
    meuTableModel tem quer ser um List de objetos de Clientes por exemplo.

    A minha dúvia é, em uma seleção de clientes por exemplo, retorna muitos dados. colocar os dados de cada cliente retornado em um objeto, isso não é muito custoso em relação à desempenho? para programar é uma teta!

    me deem uma luz por favor, estou perdido e parado com isso.
    grato pela atenção, abraço.



    Eu discordo dessa afirmação de não usar o DefaultTableModel.
    Se ele faz exatamente o que for necessário, eu o uso!

    mas, por outro lado, é bastante fácil criar uma classe estendendo o AbstractTableModel. Quando comecei a fazer isso fiquei surpreso por ser mais simples do tinha pensado e, principalmente, por ficar muito fácil adaptar ele conforme desejado - algumas coisas acabaram funcionando quase que por sozinho...

    Uma grande razão para não usar o DTM é quando o seu programa necessita armazenar os dados numa estrutura próprio causando a duplicação dos dados: sua estrutura e dentro do DTM.

    Mas como eu disse, se ele fizer o que for necessário e não tiver que usar uma estrutura adicional para armazenar os dados, pode usar o DefaultTableModel!

    Tudo EMO!




  1. simu
    Offline
    Posts: 9410

    Comment Arrow

    Publicado em: 27/07/2012 18:16:12

    paulinho!!!:

    Ei... você está usando DefaultTableModel no seu projeto??
    Não faça isso!
    DefaultTableModel é a implementação concreta padrão de TableModel usada por JTable quando nenhum modelo é especificado no construtor. Esta classe uma um Vector de Vectors para gerenciar seus dados, o que torna a implementação de AbstractTableModel uma escolha mais adequada (AbstractTableModel permite controle completo sobre como a armazenagem e manipulação dos dados são implementadas). Este Vector pode ser atribuido com o método sobrecarregado setDataVector(), e obtido com o método getDataVector(). Internamente, dois métodos convertToVector() sobrecarregados e protegidos são usados para converter matrizes de Object em Vectors quando linhas e colunas são adicionadas ou um novo Vector é atribuido. Métodos para adição, inserção, exclusão, mover colunas e linhas de dados também são fornecidos



    1. É mais difícil que escrever seu próprio TableModel;
    2. É mais lento (usa classes sincronizadas);
    3. Ocupa mais espaço em memória (duplica seus dados);
    4. Deixa o código mais confuso e difícil de manter;
    5. Usa casts inseguros;
    6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
    7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

    simu:

    Eu discordo dessa afirmação de não usar o DefaultTableModel.
    Se ele faz exatamente o que for necessário, eu o uso!

    [...]





    1. pelo contrário (assumindo o que escrevi antes: "Se ele faz exatamente o que for necessário")

    2. só vai ser (pouco) mais lento para MUITOS dados e MUITA alteração do conteúdo (difícil ser o caso para uma JTable)

    3. não se armazenar os dados apenas no DTM

    4. pelo contrário ("Se ele faz exatamente o que for necessário")

    5. e dai? argumento muito fraco para - se o programador colocar um elemento do tipo errado , a tabela vai mostrar um elemento errado

    6. ponto válido, mas não "Se ele faz exatamente o que for necessário"

    7. OK, diz tudo!

    (Déjà vu - só porque alguém (?) escreveu isso na rede não é lei)
    (acredito que esse pontos nem são de sua autoria... deveriam ser marcados de acordo...)

    normalmente também prefiro fazer o meu modelo, mas existem (poucas) situações onde é mais fácil/rápido usar o DTM...

    again tudo EMO
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. 13alemao
    Offline
    Posts: 54

    Comment Arrow

    Publicado em: 28/07/2012 13:20:33

    OK, que sirva para outros essa lição também.
    E qual seria uma forma eficiente e eficaz de fazer isso, considerando um grande numero de dados retornado da base de dados?
    _________________
    Estudante de Sistemas de Informação FIPP-Unoeste 7º Termo
    Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seus poderes ultrapassam os limites da imaginação.
    - Albert Einstein




  1. 13alemao
    Offline
    Posts: 54

    Comment Arrow

    Publicado em: 28/07/2012 13:23:40

    simu:
    paulinho!!!:

    Ei... você está usando DefaultTableModel no seu projeto??
    Não faça isso!
    DefaultTableModel é a implementação concreta padrão de TableModel usada por JTable quando nenhum modelo é especificado no construtor. Esta classe uma um Vector de Vectors para gerenciar seus dados, o que torna a implementação de AbstractTableModel uma escolha mais adequada (AbstractTableModel permite controle completo sobre como a armazenagem e manipulação dos dados são implementadas). Este Vector pode ser atribuido com o método sobrecarregado setDataVector(), e obtido com o método getDataVector(). Internamente, dois métodos convertToVector() sobrecarregados e protegidos são usados para converter matrizes de Object em Vectors quando linhas e colunas são adicionadas ou um novo Vector é atribuido. Métodos para adição, inserção, exclusão, mover colunas e linhas de dados também são fornecidos



    1. É mais difícil que escrever seu próprio TableModel;
    2. É mais lento (usa classes sincronizadas);
    3. Ocupa mais espaço em memória (duplica seus dados);
    4. Deixa o código mais confuso e difícil de manter;
    5. Usa casts inseguros;
    6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
    7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

    simu:

    Eu discordo dessa afirmação de não usar o DefaultTableModel.
    Se ele faz exatamente o que for necessário, eu o uso!

    [...]





    1. pelo contrário (assumindo o que escrevi antes: "Se ele faz exatamente o que for necessário")

    2. só vai ser (pouco) mais lento para MUITOS dados e MUITA alteração do conteúdo (difícil ser o caso para uma JTable)

    3. não se armazenar os dados apenas no DTM

    4. pelo contrário ("Se ele faz exatamente o que for necessário")

    5. e dai? argumento muito fraco para - se o programador colocar um elemento do tipo errado , a tabela vai mostrar um elemento errado

    6. ponto válido, mas não "Se ele faz exatamente o que for necessário"

    7. OK, diz tudo!

    (Déjà vu - só porque alguém (?) escreveu isso na rede não é lei)
    (acredito que esse pontos nem são de sua autoria... deveriam ser marcados de acordo...)

    normalmente também prefiro fazer o meu modelo, mas existem (poucas) situações onde é mais fácil/rápido usar o DTM...

    again tudo EMO



    Simu, eu uso o DTM em uma aplicação que fiz, e não tive nenhum problema, e já faz um tempo que o implantei. Contudo a base de dados do meu cliente não tem muita coisa, não sei se isso seria um motivo para ficar lento ou algo assim. Só foi um pouco mais trabalhoso para implementar, mas funciona. grato.
    _________________
    Estudante de Sistemas de Informação FIPP-Unoeste 7º Termo
    Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seus poderes ultrapassam os limites da imaginação.
    - Albert Einstein




  1. Relacionados





New Topic    Reply Message     Forum Main Page -> Banco de Dados - JDBC / SQL


Goto page 1