Novas colunas em tabela

Galera tenho uma aplicao em producao, cada cliente tem um banco de dados local, em uma alteração que fiz no sistemas necessitei criar duas colunas novas no banco, e queria saber qual é a melhor forma de criar no banco dos clientes essas colunas, penso que na inicialização do sistema deveria haver uma checagem das colunas existente no banco do cliente e o que deveria existir se falta alguma rodar uma instrucao de alter table criando o que falta.

Qual a melhor modo de se fazer isso ? Ja fizeram algo parecido ?

Obrigado a todos desde ja.

No Android existe este “problema” também. Quando você lança uma nova versão de um aplicativo, as vezes precisa atualizar o banco de dados embutido.

A solução do Android é, basicamente, manter um número de versão. Quando você incrementa este número, ele executa um método chamado onUpgrade. Neste método você pode efetuar a atualização do banco de dados.

Essa checagem acontece quando você tenta abrir uma conexão com o banco pela primeira vez.

Você poderia fazer algo neste sentido também. Utilizar números de versões e atualizar o banco conforme este número.

Interressante, obrigado pela informação estou estudando Android e garanto que esta informação sera util.

Mas não ha uma forma de ler a estrutura do banco de dados pelo java, neste caso é uma aplicação web com a base de dados no cliente, e entaum perceber a falta da coluna e atualizar o banco ?

Sera que existe uma forma disso, ja pesquisei o SportSchema do hibernate, talvez utiliza-lo para exportar o schema do banco achar o script da tabela e ver se a coluna existe ali, o que voce acha sera que é uma boa forma de fazer isso ?

Obrigado pela ajuda.

Se o hbm2ddl do Hibernate estiver marcado para update, ele faz este tipo de atualização. Particularmente nunca utilizei esta opção para sistemas em produção. Acho muito arriscado.

O que você quer é possível, mas eu penso que é desnecessariamente mais complexo. Se tu tiver um bom motivo, apresente-nos. :smiley:

Poise tambem estou com o pe atras de utilizar o hbm2ddl do Hibernate, por ser em producao.

Sei que ta forma que coloquei antes é um pouco complexo mas é que na verdade não vejo como o fazer de outra maneira, se voce tiver uma ideia de como faze-lo sera muito bem vinda.

humm

Se fosse usando versões, a primeira vez você teria que atualizar e, caso a atualização ocorresse com sucesso, armazenar o número da versão em algum lugar (num arquivo ou no próprio banco). Nas próximas vezes você teria que buscar esse número e executar o código de atualização somente se o número foi incrementado. Se as atualizações forem frequentes, eu acho que vale a pena.

Mas eu realmente só precisei disso no Android, e esse controle já vem pronto. Talvez exista algo pronto pra aplicações Java não-Android que eu desconheça…

Falou.