SQLite データベースのテーブルに含まれているカラム名の取得

システム開発を行う際、データベースとしては SQL を使うことが一般的です。SQL データベースとしては Oracle や SQL Server などいくつかの製品がありますが、小規模のデータベースの場合はパブリックドメインの SQLite が使われるケースが多いと思います。

SQLite にはサーバーではなくアプリケーションに組み込んで使用するという特徴があるため、自社内のシステムではなく提供先にインストールしてもらうシステムの場合、相手企業に負担をかけなくていいという利点もあります。

高額な Oracle の導入などは大企業でないと負担が大きすぎて難しいでしょうし、小規模の企業からシステム開発案件を受注して納入する場合などは SQLite 一択でしょう。

というわけで当社でも SQLite を使用したデータベースを多用しているわけですが、既存のテーブルに含まれているカラム名の一覧を取得したいケースがあります。

この場合、システム側から SQLite データベースにアクセスしてカラム名を取得することになるわけですが、ネット上を検索しても該当する情報は意外と見つからないようです。需要はあると思うのに、なんだか意外でした。

そこで、見つからないなら作ればいいということで VB.Net のコードを自作してみました。引き渡す変数はデータベースのファイル名(フルパス)とテーブル名で、戻り値はカラムの数とカラム名です。

Shared Sub SQLite_GetColumnName(ByVal database_filename As String, 
                                ByVal table_name As String, 
                                ByRef n_column As Integer, 
                                ByRef column_name() As String)

        '-------------------------------------------------------------------
        '   テーブルに含まれているカラム名の取得
        '
        '     database_filename : データベースファイル名(フルパス)
        '     table_name : テーブル名
        '
        '     n_column : テーブルに含まれているカラム数
        '     column_name(0~n_column-1) : テーブルに含まれているカラム名
        '-------------------------------------------------------------------

        Using conn = New SQLiteConnection("Data Source=" & database_filename)

            conn.Open()

            Using cmd = conn.CreateCommand()

                cmd.CommandText = "PRAGMA table_info('" & table_name & "')"

                Using dr = cmd.ExecuteReader()
                    n_column = 0
                    While dr.Read() = True
                        n_column += 1
                        ReDim Preserve column_name(n_column - 1)
                        column_name(n_column - 1) = dr(1).ToString
                    End While
                End Using
            End Using

            conn.Close()

        End Using

    End Sub

上記のコードをコピーして使えば、指定したテーブルに含まれているカラム名の一覧が “column_name” という配列で取得できます。

コード中で使用している PRAGMA コマンドなど、SQLite の構文について知りたい人はネット上に情報がたくさんあるので調べてみて下さい。