Db4o: problemas ao alterar classe

6 respostas
A

Pessoal, estou desenvolvendo um sistema cliente/servidor desktop com NetBeans e decidi utilizar o Db4o como banco de dados.

Me deparei com seguinte problema:

Fiz minha classe a ser persistida, e salvei no banco normalmente. Fiz teste de inclusão, alteração e exclusão… tudo funcionando perfeitamente… porém tive que mudar o tipo de um campo e adicionar outros, ai é que surgiu o problema. Quando salvo novos objetos ou altero algum já cadastrado, os dados ficam acessíveis normalmente. Quando fecho a aplicação e entro novamente os dados (aqueles que alterei o tipo ou inclui novo campo) não estão mais disponíveis.

Pelo que pesquisei o Db4o faria a alteração na classe automaticamente, e realmente isso ocorre. Exceto quando fecho a aplicação e entro novamente onde os dados não estão mais disponíveis.

Grato!

Alguém tenha alguma sugestão?

6 Respostas

javaflex

Poderia ser falta de commit ou algo do tipo, mas sem o código fica mais difícil te ajudarem, ainda mais por algo que quase ninguém usa.

A

javaflex, obrigado pelo retorno. bom, todos os objetos são salvos pelo código abaixo:

public static void salvar(User u){

if (u != null){

Conexao.getConexao().store(u);

Conexao.getConexao().commit();

}

}

A classe User tinha os atributos
int codigo
String nome
String login
int valor

depois tive que alterar o campo valor para String, a partir deste momento o db4o só me retorna null para o campo valor. O estranho é que enquanto o aplicativo está rodando o valor que eu coloco nesse campo fica aparecendo normalmente, só que ao fechar e abrir novamente o sistema, os dados não aparecem mais.

somente o campo que mudei o tipo que não salva, fica sempre o default do tipo.

quando volto para o tipo antigo, ele funciona normalmente. Uma solução seria apagar o arquivo do bando e criar outro com a nova assinatura da classe, porém fica inviável pois em caso de atualização futura teria que começar tudo do zero.

javaflex

Como você consegue confiar nesse obscuro banco de dados? Ou estaria usando por obrigações?

A

na verdade decidi usá-lo pela “facilidade” de uso, porém estou encontrando alguns obstáculos.

javaflex

Tem coisas que facilitam o primeiro desenvolvimento, mas depois dão grandes dores de cabeça para controle da manutenção, que é o mais importante.

Banco de dados orientado a objetos nunca vingou. Se está produzindo uma solução embarcada, tem soluções de armazenamento mais usadas e difundidas, como o sqlite. Se não for solução embarcada recomendo PostgreSql.

Lembre-se que pro usuário o mais importante são os dados. Perder dados é fatal, então mesmo resolvendo esse problema, não aconselho se aventurar em bancos de dados que foram experimentais.

A

grato!

Criado 25 de novembro de 2017
Ultima resposta 26 de nov. de 2017
Respostas 6
Participantes 2