Problema em desconectar banco de dados

5 respostas
A

oi estou trabalhando com o canco access e estou com um problema para desconectar
, se eu conecto e o desconecto ele não tem problema mas se eu uso o metodo consulta ele da problema
deve ser um problema nesse metodo o codigo vai abaixo

esta é minha classe para se conectar com o banco

/**
 *Classe para se conectar com o banco
 * @author Andrius Cichelero
 */
import java.sql.*;

public class Conexao {
    
    private static Connection conexao = null;
    
    /*
     *Metodo que retorna a conexão,cria uma se hainda não houver
     *
     *@return Connection, a conexão
     */
    public static Connection conecta(){
        if(conexao!=null){return conexao;}
        String usuario = " ";
        String senha = " ";
        String fonte = "jdbc:odbc:bar";
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conexao = DriverManager.getConnection(fonte,usuario,senha);
            conexao.setAutoCommit(false);
        }
        catch(SQLException ex){
            System.err.print("SQLException: ");
            System.err.println(ex.getMessage());
            conexao = null;
        }
        catch(java.lang.ClassNotFoundException e){
            System.err.print("ClassNotFoundException: ");
            System.err.println(e.getMessage());
        }
        return conexao;
    }
    
    /*
     *Metodo que desconecta
     */
    protected static void desconectar(){
        try{
            conexao.close();
        }
        catch(SQLException ex){
            System.out.print("SQLException: ");
            System.out.println(ex.getMessage());
        }
    }
}
e esta é a classe que tem o metodo de consulta
public class BancoADao {
    private static Connection conexao  = Conexao.conecta();
    
    protected void criaTabelaEstoque(){
        try{
            PreparedStatement comando =	conexao.prepareStatement("CREATE TABLE Estoque(descricao varchar(20),quantidade varchar(3),valor varchar(10))");
            comando.executeUpdate();
        }
        catch (SQLException ex){
            System.out.print("SQLException: ");
            System.out.println(ex.getMessage());
            try{
                    conexao.rollback();
            }
            catch (SQLException ex1){
                    System.out.print("SQLException: ");
                    System.out.println(ex.getMessage());
            }
        }
    }
    protected static ArrayList<Produto> consulta() throws SQLException{
        ArrayList<Produto> produtos = new ArrayList<Produto>();
        PreparedStatement comando = conexao.prepareStatement("Select * from Estoque order by descricao");
        ResultSet resultado = comando.executeQuery();
        while(resultado.next()){
            produtos.add(new Produto(resultado.getString("descricao"),Integer.parseInt(resultado.getString("quantidade")),new BigDecimal(resultado.getString("valor")),resultado.getDate("data")));
        }
        return produtos;
    }
}

e esta é a execução

public class Test{
     public static void main(String[] x){
           Conexao.conecta();
           BancoADao.consulta();
           Conexao.desconecta();
     }
}

e ele da o seguinte erro

SQLException: [Microsoft][Driver ODBC para Microsoft Access]Estado de transação inválido

alguem poderia me ajudar

5 Respostas

J

o metodo consulta() nao teria que estar dentro de um try … catch ???

A

na verdade ele esta ele esta so eu que quando coloquei o codigo não botei foi mal ai ,
mas mesmo com o try eo cacth ele da aquele erro na hora de desconectar

J

é bom fechar a conexao desde modo:

...desconecta() ...
     if (!con.isClosed())
            con.close();
}

olha se é isso

m0ska

tá iniciando e finalizando as transações antes de fechar a conexão?

A

cara ele ainda fica dando o mesmo erro teria mais alguma dica

Criado 3 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 5
Participantes 3