na aplicação que dou manutenção tem uma classe conexão assim:
public final class Conexao {
private static Conexao instance = null;
private LitebaseConnection conexao = null;
private Conexao() {
}
public static Conexao getInstance() {
if (instance == null)
instance = new Conexao();
return instance;
}
public LitebaseConnection getConexao() {
if (conexao == null) {
if (Settings.platform.equals("PalmOS")) {
conexao = LitebaseConnection.getInstance(Settings.applicationId, "chars_type = unicode; path = 2:\\tsfA");
LitebaseConnection.language = LitebaseConnection.LANGUAGE_PT;
// To open the logger.
//LitebaseConnection.setLogger(LitebaseConnection.getDefaultLogger());
} else {
conexao = LitebaseConnection.getInstance(Settings.applicationId, "chars_type = unicode; path = " + Settings.appPath);
LitebaseConnection.language = LitebaseConnection.LANGUAGE_PT;
// To open the logger.
//LitebaseConnection.setLogger(LitebaseConnection.getDefaultLogger());
}
}
return conexao;
}
Nos meus DAOs uso
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
para recuperar a conexao em todos os métodos.
segue classe clienteDAO:
public class ClienteDAO {
public ClienteDAO() {}
public boolean exist() throws DAOException {
try{
if(!Conexao.getInstance().getConexao().exists("tb_cliente")){
String sql = "create table tb_cliente(pk_cliente varchar(15) primary key, razaosocial varchar(40) not null, " +
"fantasia varchar(30), endereco varchar(40) not null, fk_cidade varchar(4), fk_bairro varchar(4), " +
"fk_regiao varchar(3), cep varchar(8) not null, telefone varchar(12) not null, fax varchar(12), " +
"contato varchar(25), datanasc int, email varchar(35), obs1 varchar(70), obs2 varchar(70), " +
"obs3 varchar(70), obs4 varchar(70), obs5 varchar(70), obs6 varchar(70), obs7 varchar(70), obs8 varchar(70), " +
"obs9 varchar(70), obs10 varchar(70), fk_atividadecenso varchar(3), fk_portador varchar(3), prazo int not null, " +
"fk_statuscliente varchar(2), dataultimacompra int not null, qtdultimacompra int not null, " +
"valorultimacompra double not null, valormaiorcompra double not null, tipopessoa varchar(1) not null, " +
"vendabancocpf varchar(1) not null, criticaportador varchar(1) not null, limitecredito double not null, " +
"perctroca double not null, dataabertura int not null, datareativacao int not null)";
Conexao.getInstance().getConexao().execute(sql);
return (Conexao.getInstance().getConexao().exists("tb_cliente"));
}
}catch(Exception ex){
throw new DAOException("Erro ao criar a tabela tb_cliente.", ex);
}
return true;
}
public boolean exist(Cliente cliente) throws DAOException {
try{
String sql = "select pk_cliente from tb_cliente where pk_cliente=?";
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
stmt.setString(0, cliente.getCodCliente());
ResultSet rs = stmt.executeQuery();
if( rs.next() ){
rs.close();
return true;
}else
rs.close();
return false;
}
catch(Exception ex){
throw new DAOException("Erro ao recuperar Cliente.", ex);
}
}
public boolean create(Cliente cliente) throws DAOException {
try {
String sql = "insert into tb_cliente(pk_cliente, razaosocial, fantasia, endereco, " +
"fk_cidade, fk_bairro, fk_regiao, cep, telefone, fax, contato, " +
"datanasc, email, obs1, obs2, obs3, obs4, obs5, obs6, obs7, obs8, " +
"obs9, obs10, fk_atividadecenso, fk_portador, prazo, fk_statuscliente, " +
"dataultimacompra, qtdultimacompra, valorultimacompra, valormaiorcompra, " +
"tipopessoa, vendabancocpf, criticaportador, limitecredito, perctroca, dataabertura, datareativacao) " +
"values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " +
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
stmt.setString(0, cliente.getCodCliente());
stmt.setString(1, cliente.getRazaoSocial());
stmt.setString(2, cliente.getFantasia());
stmt.setString(3, cliente.getEndereco());
stmt.setString(4, cliente.getCidade().getCodCidade());
stmt.setString(5, cliente.getBairro().getCodBairro());
stmt.setString(6, cliente.getRegiao().getCodRegiao());
stmt.setString(7, cliente.getCep());
stmt.setString(8, cliente.getTelefone());
stmt.setString(9, cliente.getFax());
stmt.setString(10, cliente.getContato());
stmt.setInt(11, cliente.getDataNasc());
stmt.setString(12, cliente.getEmail());
stmt.setString(13, cliente.getObs1());
stmt.setString(14, cliente.getObs2());
stmt.setString(15, cliente.getObs3());
stmt.setString(16, cliente.getObs4());
stmt.setString(17, cliente.getObs5());
stmt.setString(18, cliente.getObs6());
stmt.setString(19, cliente.getObs7());
stmt.setString(20, cliente.getObs8());
stmt.setString(21, cliente.getObs9());
stmt.setString(22, cliente.getObs10());
stmt.setString(23, cliente.getAtividadeCenso().getCodAtividadeCenso());
stmt.setString(24, cliente.getPortador().getCodPortador());
stmt.setInt(25, cliente.getPrazo());
stmt.setString(26, cliente.getStatusCliente().getCodStatusCliente());
stmt.setInt(27, cliente.getDataUltimaCompra());
stmt.setInt(28, cliente.getQtdUltimaCompra());
stmt.setDouble(29, cliente.getValorUltimaCompra());
stmt.setDouble(30, cliente.getValorMaiorCompra());
stmt.setString(31, cliente.getTipoPessoa());
stmt.setString(32, cliente.getVendaBancoCpf());
stmt.setString(33, cliente.getCriticaPortador());
stmt.setDouble(34, cliente.getLimiteCredito());
stmt.setDouble(35, cliente.getPercTroca());
stmt.setInt(36, cliente.getDataAbertura());
stmt.setInt(37, cliente.getDataReativacao());
int retorno = stmt.executeUpdate();
if(retorno > 0)
return true;
return false;
} catch (Exception e) {
throw new DAOException("Erro ao inserir Cliente.", e);
}
}
public Cliente restore(Cliente cliente) throws DAOException {
try{
String sql = "select pk_cliente, razaosocial, fantasia, endereco, " +
"fk_cidade, fk_bairro, fk_regiao, cep, telefone, fax, contato, " +
"datanasc, email, obs1, obs2, obs3, obs4, obs5, obs6, obs7, obs8, " +
"obs9, obs10, fk_atividadecenso, fk_portador, prazo, fk_statuscliente, " +
"dataultimacompra, qtdultimacompra, valorultimacompra, valormaiorcompra, " +
"tipopessoa, vendabancocpf, criticaportador, limitecredito, perctroca, " +
"dataabertura, datareativacao " +
"from tb_cliente where pk_cliente=?";
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
stmt.setString(0, cliente.getCodCliente());
ResultSet rs = stmt.executeQuery();
if( rs.next() ){
cliente.setCodCliente(rs.getString(1));
cliente.setRazaoSocial(rs.getString(2));
cliente.setFantasia(rs.getString(3));
cliente.setEndereco(rs.getString(4));
Cidade cidade = new Cidade();
cidade.setCodCidade(rs.getString(5));
cliente.setCidade(cidade);
Bairro bairro = new Bairro();
bairro.setCodBairro(rs.getString(6));
bairro.setCidade(cidade);
cliente.setBairro(bairro);
Regiao regiao = new Regiao();
regiao.setCodRegiao(rs.getString(7));
cliente.setRegiao(regiao);
cliente.setCep(rs.getString(8));
cliente.setTelefone(rs.getString(9));
cliente.setFax(rs.getString(10));
cliente.setContato(rs.getString(11));
cliente.setDataNasc(rs.getInt(12));
cliente.setEmail(rs.getString(13));
cliente.setObs1(rs.getString(14));
cliente.setObs2(rs.getString(15));
cliente.setObs3(rs.getString(16));
cliente.setObs4(rs.getString(17));
cliente.setObs5(rs.getString(18));
cliente.setObs6(rs.getString(19));
cliente.setObs7(rs.getString(20));
cliente.setObs8(rs.getString(21));
cliente.setObs9(rs.getString(22));
cliente.setObs10(rs.getString(23));
AtividadeCenso atividadeCenso = new AtividadeCenso();
atividadeCenso.setCodAtividadeCenso(rs.getString(24));
cliente.setAtividadeCenso(atividadeCenso);
Portador portador = new Portador();
portador.setCodPortador(rs.getString(25));
cliente.setPortador(portador);
cliente.setPrazo(rs.getInt(26));
StatusCliente statusCliente = new StatusCliente();
statusCliente.setCodStatusCliente(rs.getString(27));
cliente.setStatusCliente(statusCliente);
cliente.setDataUltimaCompra(rs.getInt(28));
cliente.setQtdUltimaCompra(rs.getInt(29));
cliente.setValorUltimaCompra(rs.getDouble(30));
cliente.setValorMaiorCompra(rs.getDouble(31));
cliente.setTipoPessoa(rs.getString(32));
cliente.setVendaBancoCpf(rs.getString(33));
cliente.setCriticaPortador(rs.getString(34));
cliente.setLimiteCredito(rs.getDouble(35));
cliente.setPercTroca(rs.getDouble(36));
cliente.setDataAbertura(rs.getInt(37));
cliente.setDataReativacao(rs.getInt(38));
rs.close();
}else
rs.close();
return cliente;
}
catch(Exception ex){
throw new DAOException("Erro ao recuperar Cliente.", ex);
}
}
public boolean update(Cliente cliente) throws DAOException {
try {
String sql = "update tb_cliente set pk_cliente=?, razaosocial=?, fantasia=?, " +
"endereco=?, fk_cidade=?, fk_bairro=?, fk_regiao=?, cep=?, telefone=?, " +
"fax=?, contato=?, datanasc=?, email=?, obs1=?, obs2=?, obs3=?, " +
"obs4=?, obs5=?, obs6=?, obs7=?, obs8=?, obs9=?, obs10=?, fk_atividadecenso=?, " +
"fk_portador=?, prazo=?, fk_statuscliente=?, dataultimacompra=?, " +
"qtdultimacompra=?, valorultimacompra=?, valormaiorcompra=?, tipopessoa=?, " +
"vendabancocpf=?, criticaportador=?, limitecredito=?, " +
"perctroca=?, dataabertura=?, datareativacao=? " +
"where pk_cliente=?";
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
stmt.setString(0, cliente.getCodCliente());
stmt.setString(1, cliente.getRazaoSocial());
stmt.setString(2, cliente.getFantasia());
stmt.setString(3, cliente.getEndereco());
stmt.setString(4, cliente.getCidade().getCodCidade());
stmt.setString(5, cliente.getBairro().getCodBairro());
stmt.setString(6, cliente.getRegiao().getCodRegiao());
stmt.setString(7, cliente.getCep());
stmt.setString(8, cliente.getTelefone());
stmt.setString(9, cliente.getFax());
stmt.setString(10, cliente.getContato());
stmt.setInt(11, cliente.getDataNasc());
stmt.setString(12, cliente.getEmail());
stmt.setString(13, cliente.getObs1());
stmt.setString(14, cliente.getObs2());
stmt.setString(15, cliente.getObs3());
stmt.setString(16, cliente.getObs4());
stmt.setString(17, cliente.getObs5());
stmt.setString(18, cliente.getObs6());
stmt.setString(19, cliente.getObs7());
stmt.setString(20, cliente.getObs8());
stmt.setString(21, cliente.getObs9());
stmt.setString(22, cliente.getObs10());
stmt.setString(23, cliente.getAtividadeCenso().getCodAtividadeCenso());
stmt.setString(24, cliente.getPortador().getCodPortador());
stmt.setInt(25, cliente.getPrazo());
stmt.setString(26, cliente.getStatusCliente().getCodStatusCliente());
stmt.setInt(27, cliente.getDataUltimaCompra());
stmt.setInt(28, cliente.getQtdUltimaCompra());
stmt.setDouble(29, cliente.getValorUltimaCompra());
stmt.setDouble(30, cliente.getValorMaiorCompra());
stmt.setString(31, cliente.getTipoPessoa());
stmt.setString(32, cliente.getVendaBancoCpf());
stmt.setString(33, cliente.getCriticaPortador());
stmt.setDouble(34, cliente.getLimiteCredito());
stmt.setDouble(35, cliente.getPercTroca());
stmt.setInt(36, cliente.getDataAbertura());
stmt.setInt(37, cliente.getDataReativacao());
stmt.setString(38, cliente.getCodCliente());
int retorno = stmt.executeUpdate();
if(retorno > 0)
return true;
return false;
} catch (Exception e) {
throw new DAOException("Erro ao atualizar Cliente.", e);
}
}
public boolean update(ClienteAlterado cliente) throws DAOException {
try {
String sql = "update tb_cliente set telefone=?, fax=?, contato=?, email=? " +
"where pk_cliente=?";
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
stmt.setString(0, cliente.getTelefone());
stmt.setString(1, cliente.getFax());
stmt.setString(2, cliente.getContato());
stmt.setString(3, cliente.getEmail());
stmt.setString(4, cliente.getCodCliente());
int retorno = stmt.executeUpdate();
if(retorno > 0)
return true;
return false;
} catch (Exception e) {
throw new DAOException("Erro ao atualizar Cliente.", e);
}
}
public boolean delete(Cliente cliente) throws DAOException {
try {
String sql = "delete from tb_cliente where pk_cliente=?";
PreparedStatement stmt = Conexao.getInstance().getConexao().prepareStatement(sql);
stmt.setString(0, cliente.getCodCliente());
int retorno = stmt.executeUpdate();
if(retorno > 0){
Conexao.getInstance().getConexao().purge("tb_cliente");
return true;
}
return false;
} catch (Exception e) {
throw new DAOException("Erro ao Excluir a tabela " + this.getClass().getName(), e);
}
}
/**
* Lista o CNPJ e Razão Social de todos os cliente ordenado pela Razão social.
* @param q - O Argumento dever ser o valor 1.
* @return - Um String[][] contendo o CNPJ e Razão Social dos clientes.
*/
public String[][] listAll() throws DAOException {
try{
String[][] retorno = null;
String sql = "select pk_cliente, razaosocial from tb_cliente order by razaosocial";
ResultSet rs = Conexao.getInstance().getConexao().executeQuery(sql);
if(rs.first()){
retorno = rs.getStrings();
rs.close();
}
else
rs.close();
return retorno;
}catch(Exception ex){
throw new DAOException("Erro ao listar Cliente.", ex);
}
}
/**
* Retorna um String[][] com o Nome, Data da Última Compra e CNPJ de todos os clientes
* que realizaram compras no periodo entre inicio e fim, de acordo com o roteiro de visita.
* @param inicio Data inicial.
* @param data Data final.
* @param dayOfWeek Identifica o roteiro de visita.
* @return Um String[][] contendo o Razão Social, Data da última compra, Valor da última compra e CNPJ dos clientes.
*/
public String[][] listAllClientesCompras(Date inicio, Date fim, int dayOfWeek) throws DAOException {
try {
String retorno[][] = null;
String sql = null;
PreparedStatement st = null;
Date date = new Date();
int d;
String diaVisita = null;
if(dayOfWeek == 7)
d = 0;
else
d = dayOfWeek;
if(d == (date.getDayOfWeek()+1))
date.advance(-6);
else if(d == (date.getDayOfWeek()+2))
date.advance(-5);
else if(d == (date.getDayOfWeek()+3))
date.advance(-4);
else if(d == (date.getDayOfWeek()+4))
date.advance(-3);
else if(d == (date.getDayOfWeek()+5))
date.advance(-2);
else if(d == (date.getDayOfWeek()+6))
date.advance(-1);
else
date.advance(d - date.getDayOfWeek());
if(dayOfWeek == 1)
diaVisita = dayOfWeek + "000000";
else if(dayOfWeek == 2)
diaVisita = "0" + dayOfWeek + "00000";
else if(dayOfWeek == 3)
diaVisita = "00" + dayOfWeek + "0000";
else if(dayOfWeek == 4)
diaVisita = "000" + dayOfWeek + "000";
else if(dayOfWeek == 5)
diaVisita = "0000" + dayOfWeek + "00";
else if(dayOfWeek == 6)
diaVisita = "00000" + dayOfWeek + "0";
else if(dayOfWeek == 7)
diaVisita = "000000" + dayOfWeek;
if (fim != null) {
sql = "select razaosocial, valorultimacompra, dataultimacompra, pk_cliente " +
"from tb_cliente c, tb_roteirovisita r " +
"where r.fk_cliente = c.pk_cliente " +
"and c.dataultimacompra > ? " +
"and c.dataultimacompra < ? " +
"and r.diavisita = ? " +
"order by c.dataultimacompra";
st = Conexao.getInstance().getConexao().prepareStatement(sql);
st.setInt(0, inicio.getDateInt());
st.setInt(1, fim.getDateInt());
st.setString(2, diaVisita);
} else {
sql = "select razaosocial, valorultimacompra, dataultimacompra, pk_cliente " +
"from tb_cliente c, tb_roteirovisita r " +
"where r.fk_cliente = c.pk_cliente " +
"and c.dataultimacompra < ? " +
"and r.diavisita = ? " +
"order by c.dataultimacompra";
st = Conexao.getInstance().getConexao().prepareStatement(sql);
st.setInt(0, inicio.getDateInt());
st.setString(1, diaVisita);
}
ResultSet rs = st.executeQuery();
if (rs.first()) {
retorno = rs.getStrings();
rs.close();
} else
rs.close();
return retorno;
} catch (Exception ex) {
throw new DAOException("Erro ao listar Clientes Compras.", ex);
}
}
a maioria dos DAOs são chamados em métodos onEvent(). Assim:
<code>
if (event.target == gridClientes) {
try {
GridEvent ge = (GridEvent)event;
if (gridClientes.getCellText(ge.row, ge.col) != null) {
Cliente cliente = new Cliente();
cliente.setCodCliente(gridClientes.getSelectedItem()[1]);
ClienteDAO clienteDAO = new ClienteDAO();
clienteDAO.restore(cliente);
FrmDetalheCliente frmPedidos = new FrmDetalheCliente(this, cliente);
this.getParentWindow().swap(frmPedidos);
}
} catch (DAOException e) {
MessageBox.showException(e, false);
}
}
Só que isso vive corrompendo tabelas. Alguem tem um exemplo de como fazer isso de uma maneira mais eficaz?
Me sugeriram instanciar o driver dentro do DAO com:
conexao = LitebaseConnection.getInstance(Settings.applicationId, "chars_type = unicode; path = 2:\\tsfA");
será que isso resolveria o problema??