Android Comment créer une base de données au Démarrage si il n'existe pas et alors les récupérer sur la prochaine Startups

Je vais avoir de la difficulté à utiliser SQLite sous Android.
Je suis capable d'analyser un fichier XML, puis de créer une base de données pour stocker le contenu.
La création, l'insertion fonctionne très bien.
Je peux voir le .Fichier de base de données dans l'Explorateur de Fichiers

Mon dernier appel à checkDataBase() renvoie la valeur faux ?! Pourquoi ?

Je suis en train de travailler sur Android 2.3 sur fr émulateur.

Je fais quelque chose de mal ?

Activité:

public class MTGDBActivity extends Activity{
String currentDBPath = "data/data/rudy.jaumain.mtgdb/databases/MTGCards";
MTGContainerData mtgcd;
MTGDatabase mtgdb;
Button buttonEditions, buttonCollection, buttonDecks;
View v;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
this.mtgcd = new MTGContainerData(this);
if (!this.checkDataBase()) {
System.out.println("FILE DOESN'T EXIST");
this.mtgdb = new MTGDatabase(this);
this.mtgdb.open();
this.mtgcd.loadCards(this.mtgdb);
System.out.println("CARDS LOADED");
this.mtgdb.close();
}
else{
System.out.println("FILE DOES EXIST");
}
} catch (Exception e) {
System.out.println("FAIL");
}
System.out.println(this.checkDataBase());
this.setContentView(R.layout.main);
this.initialize();
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(currentDBPath, null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
System.out.println("DATABASE DOES NOT EXIST");
}
return checkDB != null ? true : false;
}
public void initialize(){
try{
v = (View)this.findViewById(R.id.mainLayout);
v.setBackgroundColor(Color.WHITE);
this.buttonEditions = (Button)findViewById(R.id.buttonEdition);
this.buttonEditions.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("CLICKED");
Intent i = new Intent(v.getContext(), MTGDBEditionsActivity.class);
startActivityForResult(i,0);
}
});
this.buttonCollection = (Button)findViewById(R.id.buttonCollection);
this.buttonCollection.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("CLICKED");
Intent i = new Intent(v.getContext(), MTGDBCollectionActivity.class);
startActivityForResult(i,0);
}
});
this.buttonDecks = (Button)findViewById(R.id.buttonDecks);
this.buttonDecks.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("CLICKED");
Intent i = new Intent(v.getContext(), MTGDBDecksActivity.class);
startActivityForResult(i,0);
}
});
}
catch(Exception e1){
e1.printStackTrace();
}
}
}

Base de données:

public class MTGDatabase{
private static final String TABLE_CARDS = "table_cards";
private static final String COL_ID = "ID";
private static final int NUM_COL_ID = 0;
private static final String COL_NAME = "NAME";
private static final int NUM_COL_NAME = 1;
private static final String COL_EDITION = "EDITION";
private static final int NUM_COL_EDITION = 2;
private static final String COL_RARITY = "RARITY";
private static final int NUM_COL_RARITY = 3;
private static final String COL_MANACOST = "MANACOST";
private static final int NUM_COL_MANACOST = 4;
private static final String COL_NUMBER = "NUMBER";
private static final int NUM_COL_NUMBER = 5;
private static final String COL_COLOR = "COLOR";
private static final int NUM_COL_COLOR = 6;
public int VERSION_BDD = 1;
private SQLiteDatabase sqldb;
private MTGDatabaseAdapter mtgbdAdapter;
public MTGDatabase(Context c) {
mtgbdAdapter = new MTGDatabaseAdapter(c, "MTGCards.db", null, VERSION_BDD);
}
public void open(){
sqldb = mtgbdAdapter.getWritableDatabase();
}
public void close(){
sqldb.close();
}
public SQLiteDatabase getDatabase(){
return sqldb;
}
public long insertCard(MTGCard card){
ContentValues values = new ContentValues();
values.put(COL_NAME, card.getName());
values.put(COL_EDITION, card.getEdition());
values.put(COL_RARITY, card.getRarity());
values.put(COL_MANACOST, card.getManacost());
values.put(COL_NUMBER, card.getNumber());
values.put(COL_COLOR, card.getColor());
return sqldb.insert(TABLE_CARDS, null, values);
}
public int updateCard(int id, MTGCard card){
ContentValues values = new ContentValues();
values.put(COL_NAME, card.getName());
values.put(COL_EDITION, card.getEdition());
values.put(COL_RARITY, card.getRarity());
values.put(COL_MANACOST, card.getManacost());
values.put(COL_NUMBER, card.getNumber());
values.put(COL_COLOR, card.getColor());
return sqldb.update(TABLE_CARDS, values, COL_ID + " = " +id, null);
}
public int removeCardWithID(int id){
return sqldb.delete(TABLE_CARDS, COL_ID + " = " +id, null);
}
public MTGCard getCardWithName(String name){
Cursor c = sqldb.query(TABLE_CARDS, new String[] {COL_ID, COL_NAME, COL_EDITION, COL_RARITY, COL_MANACOST, COL_NUMBER, COL_COLOR}, COL_NAME + " LIKE \"" + name +"\"", null, null, null, null);
return cursorToCard(c);
}
private MTGCard cursorToCard(Cursor c){
if (c.getCount() == 0)
return null;
c.moveToFirst();
MTGCard card = new MTGCard();
card.setId(c.getInt(NUM_COL_ID));
card.setName(c.getString(NUM_COL_NAME));
card.setEdition(c.getString(NUM_COL_EDITION));
card.setRarity(c.getString(NUM_COL_RARITY));
card.setManacost(c.getString(NUM_COL_MANACOST));
card.setNumber(c.getString(NUM_COL_NUMBER));
card.setColor(c.getString(NUM_COL_COLOR));
c.close();
return card;
}
}

Adaptateur De Base De Données:

public class MTGDatabaseAdapter extends SQLiteOpenHelper {
private static final String TABLE_CARDS = "table_cards";
private static final String COL_ID = "_ID";
private static final String COL_NAME = "NAME";
private static final String COL_EDITION = "EDITION";
private static final String COL_RARITY = "RARITY";
private static final String COL_MANACOST = "MANACOST";
private static final String COL_NUMBER = "NUMBER";
private static final String COL_COLOR = "COLOR";
private static final String CREATE_BDD = "CREATE TABLE " 
+ TABLE_CARDS 
+ " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
+ COL_NAME + " TEXT NOT NULL, "
+ COL_EDITION + " TEXT NOT NULL, "
+ COL_RARITY + " TEXT NOT NULL, "
+ COL_MANACOST + " TEXT NOT NULL, "
+ COL_NUMBER + " TEXT NOT NULL, "
+ COL_COLOR + " TEXT NOT NULL);";
public MTGDatabaseAdapter(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_BDD);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE " + TABLE_CARDS + ";");
onCreate(db);
}
}
  • Quel est le débogueur vous montrer lors de l'étape à checkDataBase()?
  • impression à l'exception que vous obtenez dans checkDataBase() Log.e("tag", "DATABASE DOES NOT EXIST", e); au lieu du Système.out.println
  • Merci à vous, je suis un idiot !
InformationsquelleAutor Rudz17 | 2012-04-17