Erro na hora de gravar no banco

Bom dia galera,
Eu estou com um problema que eu já tentei de tudo mais não consegui, na hora que eu vou gravar no banco de dados aparece o seguinte erro no Logcat:

04-19 11:27:25.655: E/Database(224): Leak found
04-19 11:27:25.655: E/Database(224): java.lang.IllegalStateException: /data/data/br.com.afainformatica.cobrancapax/databases/cobrancapax.db SQLiteDatabase created and never closed
04-19 11:27:25.655: E/Database(224): at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1694)

pelo que vocês podem ver é um erro que o banco foi criado mas nunca foi fechado, só que eu já fechei ele em monte de lugar mas continua dando o mesmo erro, eu vou colocar uma das minhas classes DAO para vocês verem qual é o possível problema:


package br.com.afainformatica.dao;

import java.util.ArrayList;
import java.util.List;

import br.com.afainformatica.cobrancapax.db;
import br.com.afainformatica.cobrancapax.vo.BairroVO;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class BairroDAO {
    
//  private SQLiteDatabase db;
    //private db dbHelper;
     
    
    public static String table_name = "bairro";
    public static Context ctx;
    public static String[] columns = {"idbairro", "descricao", "idsetor"};
    
    public BairroDAO(Context ctx) {
        this.ctx = ctx;
//      dbHelper = new db(ctx);
    }
    
/*  public void fecharBanco(){
        dbHelper.close();
    }
    
    public void open() throws SQLException {
        db = dbHelper.getWritableDatabase();
    } */

    public boolean insert(BairroVO vo){
        SQLiteDatabase db = new db(ctx).getWritableDatabase();
        ContentValues ctv = new ContentValues();
        ctv.put("descricao", vo.getDescricao());
        ctv.put("idsetor", vo.getIdsetor());
        
        return (db.insert(table_name, null, ctv) > 0);
    }
    
    public boolean update(BairroVO vo){
        SQLiteDatabase db = new db(ctx).getWritableDatabase();
        ContentValues ctv = new ContentValues();
        ctv.put("idbairro", vo.getIdbairro());
        ctv.put("descricao", vo.getDescricao());
        ctv.put("idsetor", vo.getIdsetor());
        
        return(db.update(table_name, ctv, "idbairro=?", new String[]{vo.getIdbairro().toString()}) > 0);
    }

    public boolean delete(BairroVO vo){
        SQLiteDatabase db = new db(ctx).getWritableDatabase();
        return(db.delete(table_name, "idbairro=?", new String[]{vo.getIdbairro().toString()}) > 0);
    }
    
    public BairroVO getById(Integer ID){
        SQLiteDatabase db = new db(ctx).getReadableDatabase();
        
        Cursor rs = db.query(table_name, columns, "idbairro=?", new String[]{ID.toString()}, null, null, null);
        
        BairroVO vo = null;
        
        if (rs.moveToFirst()) {
            vo = new BairroVO();
            vo.setIdbairro(rs.getInt(rs.getColumnIndex("idbairro")));
            vo.setDescricao(rs.getString(rs.getColumnIndex("descricao")));
            vo.setIdsetor(rs.getInt(rs.getColumnIndex("idsetor")));
        }
    
        return vo;
    }
    
    public List<BairroVO> getAll() {
        SQLiteDatabase db = new db(ctx).getReadableDatabase();
        List<BairroVO> bairro = new ArrayList<BairroVO>();
        
        Cursor c = db.query(table_name, columns, null, null, null, null, null);
                
        while (c.moveToNext()) {
            BairroVO vo = new BairroVO();
            vo.setIdbairro(c.getInt(c.getColumnIndex("idbairro")));
            vo.setDescricao(c.getString(c.getColumnIndex("descricao")));
            vo.setIdsetor(c.getInt(c.getColumnIndex("idsetor")));
            
            bairro.add(vo);
        
        }
        
        return bairro;
    
    }

}

Opa,

So com o que tu colocou ai não tem como saber exatamente o problema, pois inicialmente a classe que fecha o DB tah até comentada.

Olha esse tutorial que explica bem como montar bem certinho:

http://www.androidbrasilprojetos.org/android/introducao-a-banco-de-dados-android/

Ah, e se pah fecha o DatabaseHelper e o SQLitedatabase tb.

Falou!

Fiz exatamente como no exemplo só que continua dando o mesmo erro, olha o jeito que eu deixei agora


package br.com.afainformatica.dao;

import java.util.ArrayList;
import java.util.List;

import br.com.afainformatica.cobrancapax.db;
import br.com.afainformatica.cobrancapax.vo.BairroVO;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class BairroDAO {
	
	private SQLiteDatabase db;
	private db dbHelper;
	 
	
	public static String table_name = "bairro";
	public static Context ctx;
	public static String[] columns = {"idbairro", "descricao", "idsetor"};
	
	public BairroDAO(Context ctx) {
		this.ctx = ctx;
		dbHelper = new db(ctx);
	}
	
	public void fecharBanco(){
		dbHelper.close();
		db.close();
	}
	
//	public void open() throws SQLException {
//		db = dbHelper.getWritableDatabase();
//	} 

	public boolean insert(BairroVO vo){
//		SQLiteDatabase db = new db(ctx).getWritableDatabase();
		db = dbHelper.getWritableDatabase();
		
		ContentValues ctv = new ContentValues();
		ctv.put("descricao", vo.getDescricao());
		ctv.put("idsetor", vo.getIdsetor());
		
		return (db.insert(table_name, null, ctv) > 0);
	}
	
	public boolean update(BairroVO vo){
//		SQLiteDatabase db = new db(ctx).getWritableDatabase();
		db = dbHelper.getWritableDatabase();
		ContentValues ctv = new ContentValues();
		ctv.put("idbairro", vo.getIdbairro());
		ctv.put("descricao", vo.getDescricao());
		ctv.put("idsetor", vo.getIdsetor());
		
	    return(db.update(table_name, ctv, "idbairro=?", new String[]{vo.getIdbairro().toString()}) > 0);
	}

	public boolean delete(BairroVO vo){
//		SQLiteDatabase db = new db(ctx).getWritableDatabase();
		db = dbHelper.getWritableDatabase();
		return(db.delete(table_name, "idbairro=?", new String[]{vo.getIdbairro().toString()}) > 0);
	}
	
	public BairroVO getById(Integer ID){
//		SQLiteDatabase db = new db(ctx).getReadableDatabase();
		db = dbHelper.getReadableDatabase();
		
		Cursor rs = db.query(table_name, columns, "idbairro=?", new String[]{ID.toString()}, null, null, null);
		
		BairroVO vo = null;
		
		if (rs.moveToFirst()) {
			vo = new BairroVO();
			vo.setIdbairro(rs.getInt(rs.getColumnIndex("idbairro")));
			vo.setDescricao(rs.getString(rs.getColumnIndex("descricao")));
			vo.setIdsetor(rs.getInt(rs.getColumnIndex("idsetor")));
		}
		
		rs.close();
	
		return vo;
	}
	
	public List<BairroVO> getAll() {
//		SQLiteDatabase db = new db(ctx).getReadableDatabase();
		db = dbHelper.getReadableDatabase();
		List<BairroVO> bairro = new ArrayList<BairroVO>();
		
		Cursor c = db.query(table_name, columns, null, null, null, null, null);
				
		while (c.moveToNext()) {
			BairroVO vo = new BairroVO();
			vo.setIdbairro(c.getInt(c.getColumnIndex("idbairro")));
			vo.setDescricao(c.getString(c.getColumnIndex("descricao")));
			vo.setIdsetor(c.getInt(c.getColumnIndex("idsetor")));
			
			bairro.add(vo);
		
		}
		
		c.close();
		
		return bairro;
	
	}

}

Não sei se é assim, mas continua dando o mesmo erro.