J'ai essayer ce code
Cursor c=db.rawQuery("SELECT name FROM sqlite_master WHERE type = 'table'",null);
c.moveToFirst();
while(!c.isAfterLast()){
Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show();
}
mais cela génère une erreur "Android.database.sqlite.SQLiteException: no such table: sqlite_master(code 1):,while compiling: SELECT name FROM sqlite_master WHERE type='table'"
Comment récupérer tous les noms de table? Aidez moi
Merci d'avance..
Vérifié, testé et fonctionnel. Essayez ce code:
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
if (c.moveToFirst()) {
while ( !c.isAfterLast() ) {
Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show();
c.moveToNext();
}
}
Je suppose, à un moment donné, que vous saisirez une liste des noms de table pour afficher peut-être un ListView
ou quelque chose. Pas seulement montrer un toast.
Code non testé. Juste ce qui m'est venu à l'esprit. Faites un test avant de l'utiliser dans une application de production.; -)
Dans ce cas, tenez compte des modifications suivantes apportées au code publié ci-dessus:
ArrayList<String> arrTblNames = new ArrayList<String>();
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
if (c.moveToFirst()) {
while ( !c.isAfterLast() ) {
arrTblNames.add( c.getString( c.getColumnIndex("name")) );
c.moveToNext();
}
}
Changez votre chaîne sql en celle-ci:
"SELECT name FROM sqlite_master WHERE type='table' AND name!='Android_metadata' order by name"
Pour obtenir nom de la table avec liste de toutes les colonnes de cette table
public void getDatabaseStructure(SQLiteDatabase db) {
Cursor c = db.rawQuery(
"SELECT name FROM sqlite_master WHERE type='table'", null);
ArrayList<String[]> result = new ArrayList<String[]>();
int i = 0;
result.add(c.getColumnNames());
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
String[] temp = new String[c.getColumnCount()];
for (i = 0; i < temp.length; i++) {
temp[i] = c.getString(i);
System.out.println("TABLE - "+temp[i]);
Cursor c1 = db.rawQuery(
"SELECT * FROM "+temp[i], null);
c1.moveToFirst();
String[] COLUMNS = c1.getColumnNames();
for(int j=0;j<COLUMNS.length;j++){
c1.move(j);
System.out.println(" COLUMN - "+COLUMNS[j]);
}
}
result.add(temp);
}
Essayez d'ajouter le schéma avant la table
schema.sqlite_master
De FAQ SQL
Si vous exécutez le programme d'accès en ligne de commande sqlite3, vous pouvez taper ".tables" pour obtenir une liste de toutes les tables. Ou vous pouvez taper ".schema" pour voir le schéma complet de la base de données, y compris toutes les tables et les index. L'une ou l'autre de ces commandes peut être suivie d'un modèle LIKE qui restreindra les tables affichées.
À partir d'un programme C/C++ (ou d'un script utilisant les liaisons Tcl/Ruby/Perl/Python), vous pouvez accéder aux noms de table et d'index en effectuant un SELECT sur une table spéciale nommée "SQLITE_MASTER". Chaque base de données SQLite possède une table SQLITE_MASTER qui définit le schéma de la base de données . La table SQLITE_MASTER ressemble à ceci:
CREATE TABLE sqlite_master (type TEXT, nom TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT);
Essaye ça:
SELECT name FROM sqlite_master WHERE type = "table";