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. 
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.