私はこのコードを試してみました
_ 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();
}
_
しかし、それはエラー"Android.database.sqlite.SQLiteException: no such table: sqlite_master(code 1):,while compiling: SELECT name FROM sqlite_master WHERE type='table'"
をスローします
すべてのテーブル名を取得する方法は?助けて
前もって感謝します..
チェック、テスト、機能します。このコードを試してください:
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();
}
}
行の下のある時点で、テーブル名のリストを取得して、おそらくListView
または何かで表示すると仮定しています。トーストを表示するだけではありません。
テストされていないコード。頭に浮かんだのは、本番アプリで使用する前にテストすることです。;-)
その場合、上記のコードに対する次の変更を検討してください。
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();
}
}
SQL文字列を次のように変更します。
"SELECT name FROM sqlite_master WHERE type='table' AND name!='Android_metadata' order by name"
そのテーブルのすべての列のリストでテーブル名を取得するには
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);
}
テーブルの前にスキーマを追加してみてください
schema.sqlite_master
SQL FAQ から
Sqlite3コマンドラインアクセスプログラムを実行している場合は、「。tables」と入力してすべてのテーブルのリストを取得できます。または、「。schema」と入力して、すべてのテーブルとインデックスを含む完全なデータベーススキーマを表示できます。これらのコマンドのいずれかに、表示されるテーブルを制限するLIKEパターンを続けることができます。
C/C++プログラム(またはTcl/Ruby/Perl/Pythonバインディングを使用するスクリプト)から、「SQLITE_MASTER」という名前の特別なテーブルでSELECTを実行することで、テーブル名とインデックス名にアクセスできます。すべてのSQLiteデータベースには、データベースのスキーマを定義するSQLITE_MASTERテーブルがあります。 SQLITE_MASTERテーブルは次のようになります。
CREATE TABLE sqlite_master(タイプTEXT、名前TEXT、tbl_name TEXT、ルートページINTEGER、sql TEXT);
これを試して:
SELECT name FROM sqlite_master WHERE type = "table";