4831


現在DBに二つのテーブルがあり、その二つのテーブルにはそれぞれ`text`というカラムがあります。その二つの`text`カラムのデータを取得してとりあえずログに表示させようとしているのですが、次のようなエラーが出てきてしまいます。

[code]

    no such column: text (code 1): , while compiling: SELECT text FROM sqlite_master WHERE type = 'table'
    
[/code]

`sqlite_master`というようなものがあるということを先ほど知ったのですが、そもそもこれを使えば僕がやりたいような「全テーブル内で、指定したカラムのデータの取得」ということができるのでしょうか？以下に現在のコードを記します。間違いがあれば指摘していただけるとありがたいです。すみませんが、宜しくお願いします。

[code]

            Cursor cursor = MyDB.db.rawQuery("SELECT text FROM sqlite_master WHERE type = 'table'", null);
            while (cursor.moveToNext()) {
                Log.v("--->", cursor.getString(cursor.getColumnIndex("text")));
            }
    
[/code]


CC BY-SA 3.0
2015-01-19T06:24:44.797
4829
2015-01-19T06:56:25.953
5210
question
android sqlite
sqlite_masterの使い方


[`SQLLITE_MASTER`](http://www.sqlite.org/faq.html#q7)
は、DBに含まれるスキーマ情報を含んでいるだけで、全てのデータを保持しているわけではありません。以下の SQL で、テーブルのDDLを得られる類のものです。

[code]

    SELECT name FROM sqlite_master WHERE type='table';
    
[/code]

目的のためには、テーブル名を得たうえで、ここはオーソドックスに、 `union` でいいのではないでしょうか。

[code]

    // Scheme
    CREATE TABLE table1 ( id int, text varchar);
    CREATE TABLE table2 ( id int, text varchar);
    INSERT INTO table1 (id, text) values ( 1, "table1-1");
    INSERT INTO table1 (id, text) values ( 2, "table1-2");
    INSERT INTO table1 (id, text) values ( 3, "table1-3");
    INSERT INTO table1 (id, text) values ( 4, "table1-4");
    INSERT INTO table1 (id, text) values ( 5, "table1-5");
    INSERT INTO table2 (id, text) values ( 1, "table2-1");
    INSERT INTO table2 (id, text) values ( 2, "table2-2");
    INSERT INTO table2 (id, text) values ( 3, "table2-3");
    INSERT INTO table2 (id, text) values ( 4, "table2-4");
    INSERT INTO table2 (id, text) values ( 5, "table2-5");
    
    // DB Scheme
    select id, text from (
      select id, text from table1
      union
      select id, text from table2
    ) where text like "%-3";
    
[/code]

Result:

``id``text`  
`3 ``table1-3`  
`3 ``table2-3``

追加ですが、テーブルのカラム名を列挙するのには、

[code]

    db.rawQuery("pragma table_info(" + table_name + ")", null);
    
[/code]

が使えるので。組み合わせると遠回りですが実現できそうですね。


CC BY-SA 3.0
2015-01-19T06:51:18.497
4831
2015-01-19T06:56:25.953
2015-01-19T06:56:25.953
4978
4978
4829
answer