J'ai un peu de difficulté à comprendre les concepts de fonctionnement des bases de données SQLite dans android. J'ai créé une classe DatabaseHelper.java qui est la suivante:Base de données SQLite dans android et java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "library.db";
public static final String TITLE = "title";
public static final String MUSICTITLE = "musictitle";
public static final String AUTHOR = "author";
public static final String ARTIST = "artist";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE music (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, artist TEXT);");
db.execSQL("CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT);");
db.execSQL("CREATE TABLE movies (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
android.util.Log.v("Constants",
"Upgrading database which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS books");
db.execSQL("DROP TABLE IF EXISTS music");
db.execSQL("DROP TABLE IF EXISTS movies");
onCreate(db);
}
}
Pour autant que je suis conscient que ceci fonctionne et a été vérifiée à l'aide de la console adb.
Ma question est comment puis-je interroger cette base de données au sein de l'application à partir d'une activité différente, par exemple je veux dans mon application pour interroger la base de données: SELECT titre FROM books; qui me retournera les titres de la table du livre, comment puis-je me connecter à la base de données, exécuter cette requête puis stocker tous les résultats dans un tableau?
---------------------------------- Modifier ----------- -----------------------------
Droit donc dans la partie où je veux interroger j'ai placé ce code:
if (category.equals("Books")){
img.setImageResource(R.drawable.book);
ArrayList<String> list = new ArrayList<String>();
dh = new DatabaseHelper(this);
SQLiteDatabase db = dh.getReadableDatabase();
Cursor cursor = db.query("books", new String[] { "title" }, null, null, null, null, "title desc");
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(1));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
list.add("Test");
cont_array = (String[]) list.toArray();
db.close();
}
Qui passe la catégorie en bas de l'activité précédente. De la réponse d'Olivier. Ce code bloque l'application et je n'ai aucune idée pourquoi. la variable cont_array est utilisée après cette instruction if pour remplir un ListView. Quelqu'un at-il des idées où je me trompe, il n'y a rien dans LogCat pour me dire où il échoue?
Edited ma question après avoir utilisé votre code et toujours avoir des erreurs. – SamRowley
Sans le message d'erreur concret, c'est difficile à dire. Mais il y a un piège commun dans votre code. Essayez d'utiliser 'cont_array = (Chaîne []) list.toArray (nouvelle chaîne [list.size()])' –
Je finis kI ont résolu ce problème, mais la récupération des données ne semble pas apporter quelque chose en retour , donc list.add (cursor.getString (0)); ne semble pas faire quoi que ce soit. J'ai testé cela en utilisant un TextView et en mettant le résultat dans cette vue de texte mais il retourne false. – SamRowley