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