Fala galeraaa, tudo tranquilo? :D
Amigos, tenho um problema que não me entra na cabeça.
Eu estou desenvolvendo um sistema com o bando de dados Db4o.
E eu tenho uma tela de cadastro de usuários, feita com swing.
O problema é o seguinte:
Quanto tento fazer um "store" do objeto, ele diz que o banco de dados está fechado. :(
com.db4o.ext.DatabaseClosedException
O problema é que não consigo entender onde porque ele pega o banco fechado.
O trecho de código que ele tá tentando executar é esse, exatamente na hora de salvar um novo dado.
if (editando) {
UsuarioDAO dao = new UsuarioDAO();
UsuarioVO exemplo = new UsuarioVO(Integer.valueOf(editID.getText()));
UsuarioVO novo = new UsuarioVO();
novo.setNome(editNome.getText());
novo.setEmail(editEmail.getText());
novo.setUsuario(editUsuario.getText());
novo.setSenha(editSenha.getText());
dao.update(exemplo, novo);
} else {
UsuarioDAO dao = new UsuarioDAO();
UsuarioVO usuario = new UsuarioVO(dao.getLast() + 1);
usuario.setNome(editNome.getText());
usuario.setEmail(editEmail.getText());
usuario.setUsuario(editUsuario.getText());
usuario.setSenha(editSenha.getText());
dao.insert(usuario);
}
O meu problema está dando no else, desse if aí!
Quando clico em novo, e deixa false o boolean editando, e quando eu clico em editar,
ele deixa true.
Dentro do else, ele tá dando problema na linha 14, desse código aí, específicamente em:
dao.getLast() + 1
O meu DAO está assim:
package br.com.andrey.usuario;
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Andrey
*/
public class UsuarioDAO {
ObjectContainer db = Db4oEmbedded.openFile(
Db4oEmbedded.newConfiguration(), "C:/Sistema/dados/usuarios.odb");
public List<UsuarioVO> getAll() {
List<UsuarioVO> lista = new ArrayList<UsuarioVO>();
try {
ObjectSet resultado = db.queryByExample(UsuarioVO.class);
for (Object o : resultado) {
lista.add((UsuarioVO) o);
}
} catch (Exception e) {
System.err.println(e);
} finally {
db.close();
}
return lista;
}
public UsuarioVO getById(int id) {
UsuarioVO usuario = null;
try {
UsuarioVO exemplo = new UsuarioVO(id);
usuario = (UsuarioVO) db.queryByExample(exemplo).next();
} catch (Exception e) {
System.err.println(e);
} finally {
db.close();
}
return usuario;
}
public int getLast() {
int i = 0;
int last = 0;
while (i < getAll().size()) {
if (last < getAll().get(i).getId()) {
last = getAll().get(i).getId();
}
i++;
}
return last;
}
public void insert(UsuarioVO usuario) {
try {
db.store(usuario);
} catch (Exception e) {
System.err.println(e);
} finally {
db.close();
}
}
public void update(UsuarioVO exemplo, UsuarioVO novo) {
try {
UsuarioVO achado = (UsuarioVO) db.queryByExample(exemplo).next();
achado.setNome(novo.getNome());
achado.setEmail(novo.getEmail());
achado.setUsuario(novo.getUsuario());
achado.setSenha(novo.getSenha());
db.store(achado);
} catch (Exception e) {
System.err.println(e);
} finally {
db.close();
}
}
public void delete(UsuarioVO exemplo) {
try {
db.delete(exemplo);
} catch (Exception e) {
System.err.println(e);
} finally {
db.close();
}
}
}
Galera, se puderem me ajudar, agradeço!
Enquanto isso, vou me virando aqui.
Desde já meu obrigado.
:)