Ajuda com SQLiteOpenHelper

Estou utilizando o SQLiteOpenHelper

segue a classe:

[code]public class Banco extends SQLiteOpenHelper{

private String[] scriptSql;
private String scriptDelete;

public Banco(Context context, String name, int version,
		String[] sqlCreate, String sqlDelete) {
	super(context, name, null, version);
	this.scriptSql = sqlCreate;
	this.scriptDelete = sqlDelete;
}

@Override
public void onCreate(SQLiteDatabase db) {
	Log.i("Banco", "Criando o banco");
	int qtdeScript = scriptSql.length;
	for(int i=0; i<qtdeScript; i++)
	{
		String sql = scriptSql[i];
		Log.i("Banco", sql);
		db.execSQL(sql);
	}
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	Log.w("Banco", "Atualizando da versão " + oldVersion + " para a versão " + newVersion + ". Todos os registros serão apagados");
	Log.i("Banco", scriptDelete);
	onCreate(db);
	
}[/code]

depois em cada classe DAO eu coloco:

public CartaoDAO(Context context) { banco = new Banco(context, CartaoDAO.NOME_BANCO, CartaoDAO.VERSAO_BANCO, CartaoDAO.SCRIPT_DATABASE_CREATE, CartaoDAO.SCRIPT_DATABASE_DELETE); db = banco.getWritableDatabase(); }

pelo que eu percebi ele cria as tabelas somente quando eu utilizo a classe, é isso mesmo?

porque eu tenho duas classes, CartaoDAO e BandeiraDAO, quando eu inicio a aplicação eu ja listo os cartões cadastrados, dai ele cria a tabela Cartao, só que quando eu vou cadastrar um novo cartão, eu listo as bandeiras que estão cadastradas, pelo que pude perceber, no momento que eu tento listar as bandeiras ele retorna um erro de que ainda não existe a tabela Bandeira, como resolvo isso?

segue o erro:

07-22 19:27:28.984: ERROR/AndroidRuntime(3596): FATAL EXCEPTION: main
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cartaofacil/com.cartaofacil.AddCartao}: android.database.sqlite.SQLiteException: no such table: Bandeira: , while compiling: SELECT DISTINCT Id, Nome FROM Bandeira
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.os.Handler.dispatchMessage(Handler.java:99)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.os.Looper.loop(Looper.java:123)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at java.lang.reflect.Method.invokeNative(Native Method)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at java.lang.reflect.Method.invoke(Method.java:521)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at dalvik.system.NativeStart.main(Native Method)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): Caused by: android.database.sqlite.SQLiteException: no such table: Bandeira: , while compiling: SELECT DISTINCT Id, Nome FROM Bandeira
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:64)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:80)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:46)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at com.cartaofacil.dao.BandeiraDAO.listarNome(BandeiraDAO.java:87)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at com.cartaofacil.AddCartao.carregaBandeira(AddCartao.java:70)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at com.cartaofacil.AddCartao.onCreate(AddCartao.java:38)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-22 19:27:28.984: ERROR/AndroidRuntime(3596): … 11 more

Seu problema está no método listarNome da classe BandeiraDAO, poste esse método para vermos, parece erro de SQL.

segue o método

[code]public ArrayList listarNome()
{
ArrayList bandeiras = new ArrayList();
Cursor c = db.query(true, TABELA_BANDEIRA, BandeiraDAO.COLUNAS, null, null, null, null, null, null);
if(c.getCount() > 0)
{
c.moveToFirst();
do
{
bandeiras.add(c.getString(1));
}
while(c.moveToNext());
}

	bandeiras.add("Incluir Nova");
	c.close();
	return bandeiras;
}[/code]

Da para postar esse monte de variaveis estaticas que guardam suas SQLs, é impossivel tentar adivinhar isso.

segue a classe dao:

[code]public class BandeiraDAO
{
private SQLiteDatabase db = null;
private static final String SCRIPT_DATABASE_DELETE = “DROP TABLE IF EXISTS Bandeira”;
private static final String TABELA_BANDEIRA = “Bandeira”;
private static final String[] SCRIPT_DATABASE_CREATE = new String[] {"CREATE TABLE IF NOT EXISTS Bandeira(Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
"Nome Varchar2(30)); ", "INSERT INTO Bandeira (Nome) VALUES (‘Visa’); ", "INSERT INTO Bandeira (Nome) VALUES (‘Mastercard’); "};
private static final String NOME_BANCO = “cartaofacildb”;
private static final int VERSAO_BANCO = 1;
private Banco banco;

private static final String ID = "Id";
private static final String NOME = "Nome";

private static final String[] COLUNAS = {BandeiraDAO.ID, BandeiraDAO.NOME};

public BandeiraDAO(Context context) {
	banco = new Banco(context, BandeiraDAO.NOME_BANCO, BandeiraDAO.VERSAO_BANCO, BandeiraDAO.SCRIPT_DATABASE_CREATE, BandeiraDAO.SCRIPT_DATABASE_DELETE);
	db = banco.getWritableDatabase();
}

public String save(Bandeira bandeira)
{
	try
	{
		Log.i("Bandeira DAO", "Chegou na dao");
		ContentValues valores = new ContentValues();
		valores.put("Nome", bandeira.getNome());
		db.insert(TABELA_BANDEIRA, null, valores);
		return "";
	}
	catch(Exception e)
	{
		return e.toString();
	}
}

public void update(Bandeira bandeira)
{
	ContentValues valores = new ContentValues();
	valores.put("Nome", bandeira.getNome());
	db.update(TABELA_BANDEIRA, valores, "Id=?", new String[]{bandeira.getId()+""});
}

public void delete(int id)
{
	db.delete(TABELA_BANDEIRA, "Id=?", new String[]{id+""});
}

public ArrayList<Bandeira> listar() 
{
	ArrayList<Bandeira> bandeiras = new ArrayList<Bandeira>();
	Cursor c = db.query(true, TABELA_BANDEIRA, BandeiraDAO.COLUNAS, null, null, null, null, null, null);
	if(c.getCount() > 0)
	{
		c.moveToFirst();
		do
		{
			Bandeira bandeira = new Bandeira();
			bandeira.setId(c.getInt(0));
			bandeira.setNome(c.getString(1));
			bandeiras.add(bandeira);
		}
		while(c.moveToNext());
	}
	Log.i("Listar", "Listou " + bandeiras.size() + " registros");
	c.close();
	return bandeiras;
}

public ArrayList<String> listarNome() 
{
	ArrayList<String> bandeiras = new ArrayList<String>();
	Cursor c = db.query(true, TABELA_BANDEIRA, BandeiraDAO.COLUNAS, null, null, null, null, null, null);
	if(c.getCount() > 0)
	{
		c.moveToFirst();
		do
		{
			bandeiras.add(c.getString(1));
		}
		while(c.moveToNext());
	}
	
	bandeiras.add("Incluir Nova");
	c.close();
	return bandeiras;
}

public Bandeira getBandeira(long id)
{
	Cursor c = db.query(true, TABELA_BANDEIRA, BandeiraDAO.COLUNAS, "Id=?", new String[]{id+""}, null, null, null, null);
	Bandeira bandeira = null;
	if(c.getCount() > 0)
	{
		bandeira = new Bandeira();
		c.moveToFirst();
		bandeira.setId(c.getInt(0));
		bandeira.setNome(c.getString(1));
	}
	c.close();
	return bandeira;
}[/code]

mas acho que o problema não está aqui

O estranho é que a tabela cartão ele cria normal, mas a tabela bandeira não é criada