J'essaye de mettre en place une base de données simple de SQLite dans Android, manipulant le schéma par l'intermédiaire d'une sous-classe de SQLiteOpenHelper. Cependant, lorsque j'interroge mes tables, les colonnes que je pense avoir insérées ne sont jamais présentes.Gotchas INSERTing dans SQLite sur Android?
A savoir, dans la méthode onCreate(SQLiteDatabase db)
de SQLiteOpenHelper, j'utilise db.execSQL()
pour exécuter les commandes CREATE TABLE, puis ont essayé les deux db.execSQL
et db.insert()
pour exécuter des commandes sur les INSERT tables que je viens de créer. Cela semble fonctionner correctement, mais quand j'essaie de les interroger, je reçois toujours 0 lignes retournées (pour le débogage, les requêtes que j'exécute sont simples SELECT * FROM table
et en vérifiant getCount()
du curseur).
Quelqu'un a déjà rencontré quelque chose comme ça? Ces commandes semblent s'exécuter sur la ligne de commande sqlite3. Sont-ils des pièges qui me manquent (par exemple INSERTS doit/ne doit pas être terminé par un point-virgule, ou un problème impliquant plusieurs tables)? J'ai joint une partie du code ci-dessous.
Merci pour votre temps, et laissez-moi savoir si je peux clarifier davantage.
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE "+ LEVEL_TABLE +" (" +
" "+ _ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
" level TEXT NOT NULL,"+
" rows INTEGER NOT NULL,"+
" cols INTEGER NOT NULL);");
db.execSQL("CREATE TABLE "+ DYNAMICS_TABLE +" (" +
" level_id INTEGER NOT NULL," +
" row INTEGER NOT NULL,"+
" col INTEGER NOT NULL,"+
" type INTEGER NOT NULL);");
db.execSQL("CREATE TABLE "+ SCORE_TABLE +" (" +
" level_id INTEGER NOT NULL," +
" score INTEGER NOT NULL,"+
" date_achieved DATE NOT NULL,"+
" name TEXT NOT NULL);");
this.enterFirstLevel(db);
}
et un échantillon du code d'insertion Je suis actuellement à l'aide, qui est appelé à enterFirstLevel()
(codées en dur certaines valeurs juste pour le faire fonctionner ...):
private void insertDynamic(SQLiteDatabase db, int row, int col, int type)
{
ContentValues values = new ContentValues();
values.put("level_id", "1");
values.put("row", Integer.toString(row));
values.put("col", Integer.toString(col));
values.put("type", Integer.toString(type));
db.insertOrThrow(DYNAMICS_TABLE, "col", values);
}
Enfin, le code de requête ressemble à ceci:
private Cursor fetchLevelDynamics(int id)
{
SQLiteDatabase db = this.leveldata.getReadableDatabase();
try {
String fetchQuery = "SELECT * FROM " + DYNAMICS_TABLE;
String[] queryArgs = new String[0];
Cursor cursor = db.rawQuery(fetchQuery, queryArgs);
Activity activity = (Activity) this.context;
activity.startManagingCursor(cursor);
return cursor;
}
finally {
db.close();
}
}
Bien que ce wasn techniquement la réponse (je l'ai trouvé, et l'a écrit comme une réponse séparée à la question), j'ai apprécié les conseils de débogage, je voulais que la question marquée comme répondue, et de vous donner les points de réputation. Merci pour votre aide^_^ –
Vous êtes les bienvenus. Heureux d'avoir pu aider. –