JP2008217439A - テーブル操作用インタフェースプログラム - Google Patents
テーブル操作用インタフェースプログラム Download PDFInfo
- Publication number
- JP2008217439A JP2008217439A JP2007054118A JP2007054118A JP2008217439A JP 2008217439 A JP2008217439 A JP 2008217439A JP 2007054118 A JP2007054118 A JP 2007054118A JP 2007054118 A JP2007054118 A JP 2007054118A JP 2008217439 A JP2008217439 A JP 2008217439A
- Authority
- JP
- Japan
- Prior art keywords
- type
- value
- card
- user application
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】 テーブル毎に共通のインタフェースを提供することができる汎用性に優れたテーブル操作用インタフェースプログラム(API)を提供すること
【解決手段】 ユーザアプリケーションプログラムから構造体のメンバ毎に1枚のカード型構造体により構成される複数のカード型構造体を受取り、その受け取った各カード型構造体に格納された型情報によって各メンバの値の格納サイズを計算し、計算結果のメンバ値を格納する構造体の格納領域を作成する第1の手段と、前記複数のカード型構造体のそれぞれで指定されたメンバ値を下位層のデータベース等から取得する第2の手段と、取得したメンバ値を前記第1の手段で作成した格納領域の構造体に格納し、前記ユーザアプリケーションプログラムに返す第3の手段とを備える。
【選択図】 図1
【解決手段】 ユーザアプリケーションプログラムから構造体のメンバ毎に1枚のカード型構造体により構成される複数のカード型構造体を受取り、その受け取った各カード型構造体に格納された型情報によって各メンバの値の格納サイズを計算し、計算結果のメンバ値を格納する構造体の格納領域を作成する第1の手段と、前記複数のカード型構造体のそれぞれで指定されたメンバ値を下位層のデータベース等から取得する第2の手段と、取得したメンバ値を前記第1の手段で作成した格納領域の構造体に格納し、前記ユーザアプリケーションプログラムに返す第3の手段とを備える。
【選択図】 図1
Description
本発明は、ユーザアプリケーションプログラムから任意のテーブルを操作するためのテーブル操作用インタフェースプログラム(テーブル操作用API)に係り、特に、C言語の構造体を使用したテーブル操作用インタフェースプログラムに関するものである。
C言語のプログラム開発において、複数の項目を一度に扱う場合は、一般的に構造体を使用することが多い。しかし、構造体は型情報と名前情報しか持っておらず、各メンバがどの領域に配置されるのか確定されないため、不都合が生じることがある。
例えば、データベースで表されるデータの取得・設定を行うテーブル操作用APIを考える。これは、ユーザアプリケーションプログラムとデータベース(以下、DBと略記)を繋ぐ中継関数となる。ユーザアプリケーションプログラムは構造体を使用してデータの受け渡しを行い、DBは構造体ではなくメンバごとの詳しい情報(型、サイズ、名前)を使う。
中継関数を用いた場合、実DBに依存しないAPIを作成することができ、またDBアクセス用の専用コマンド(SQL等)を習得する必要が無い、などの利点が挙げられる。
ところが、このような中継関数を実装するためには、ユーザアプリケーションである上位層に構造体形式のデータを返却しなくてはならない。そのため、上位に返却する構造体の型を中継関数が予め知っていなくてはならない。つまり、任意の構造体に対応した汎用関数は作成できないこととなる。
例えば、データベースで表されるデータの取得・設定を行うテーブル操作用APIを考える。これは、ユーザアプリケーションプログラムとデータベース(以下、DBと略記)を繋ぐ中継関数となる。ユーザアプリケーションプログラムは構造体を使用してデータの受け渡しを行い、DBは構造体ではなくメンバごとの詳しい情報(型、サイズ、名前)を使う。
中継関数を用いた場合、実DBに依存しないAPIを作成することができ、またDBアクセス用の専用コマンド(SQL等)を習得する必要が無い、などの利点が挙げられる。
ところが、このような中継関数を実装するためには、ユーザアプリケーションである上位層に構造体形式のデータを返却しなくてはならない。そのため、上位に返却する構造体の型を中継関数が予め知っていなくてはならない。つまり、任意の構造体に対応した汎用関数は作成できないこととなる。
このような問題を踏まえ、従来においては、使用するテーブル、取得するデータごとにAPIを持つDAO(Data Access Object)などが提案されている。これは、テーブル毎に専用のAPI(Application Programming Interface)を作成する仕組みである。
例えば、図6のような構成を持ち、ユーザアプリケーションプログラム601が直接にDB依存Interface604を呼び出すことを禁止する。代わりに、DAOクラス602と呼ばれるクラスをテーブル603ごとに自動生成し、ユーザアプリケーションプログラム601はDAOクラス602のメソッドを経由してデータにアクセスする。こうすることでDB層の実体が変わってもユーザアプリケーションプログラム601を変更することなく動作させることができる。
また、下記特許文献1のように、共通APIを作成して下位レイヤを入れ替えられるようにした発明も提案されている。これもテーブルごとにAPIの作成が必要であり、任意のテーブルに対応したものとはなっていない。
例えば、図6のような構成を持ち、ユーザアプリケーションプログラム601が直接にDB依存Interface604を呼び出すことを禁止する。代わりに、DAOクラス602と呼ばれるクラスをテーブル603ごとに自動生成し、ユーザアプリケーションプログラム601はDAOクラス602のメソッドを経由してデータにアクセスする。こうすることでDB層の実体が変わってもユーザアプリケーションプログラム601を変更することなく動作させることができる。
また、下記特許文献1のように、共通APIを作成して下位レイヤを入れ替えられるようにした発明も提案されている。これもテーブルごとにAPIの作成が必要であり、任意のテーブルに対応したものとはなっていない。
DBから取得した値を上位層に返却するテーブル操作用APIを作成する場合、従来はDAOのような仕組みが使われていた。この仕組みでは、テーブルごとに新しいメソッドを定義する必要があり、テーブル毎に共通のインタフェースを提供することができないという問題がある。
本発明の目的は、テーブル毎に共通のインタフェースを提供することができる汎用性に優れたテーブル操作用インタフェースプログラム(API)を提供することにある。
上記目的を達成するために、本発明に係るテーブル操作用インタフェースプログラム(以下、テーブル操作用API)は、ユーザアプリケーションプログラムから構造体のメンバ毎に1枚のカード型構造体により構成される複数のカード型構造体を受取り、その受け取った各カード型構造体に格納された型情報によって各メンバの値の格納サイズを計算し、計算結果のメンバ値を格納する構造体の格納領域を作成する第1の手段と、前記複数のカード型構造体のそれぞれで指定されたメンバ値を下位層のデータベース等から取得する第2の手段と、取得したメンバ値を前記第1の手段で作成した格納領域の構造体に格納し、前記ユーザアプリケーションプログラムに返す第3の手段としてコンピュータを機能させるステップを備えることを特徴とする。
本発明のテーブル操作用APIによれば、次の効果がある。
上位層のユーザアプリケーションプログラムはメンバ毎の構造体を用いてデータアクセスが可能となる。そのため、既存のシステムを壊すことなく、下位層の変更が可能となる。
ミドルウェア層では、上位で使用する構造体の形式を事前に決めることなく、任意の構造体を上位層から受け取ることができる。
上位層のユーザアプリケーションプログラムはメンバ毎の構造体を用いてデータアクセスが可能となる。そのため、既存のシステムを壊すことなく、下位層の変更が可能となる。
ミドルウェア層では、上位で使用する構造体の形式を事前に決めることなく、任意の構造体を上位層から受け取ることができる。
以下、本発明を図示する実施の形態に基づいて詳細に説明する。
図1は、本発明の一実施の形態を示すシステム構成図である。
この実施形態のシステムでは、移動体通信装置110上で動作するユーザアプリケーション120と、SQLを解釈できるDB部150と、DB部150とユーザアプリケーション120を結ぶためのテーブル操作用API140と、テーブル操作用API140の中に組み込んだ構造体計算部141、構造体への値格納部142、値解析部143、DB制御部144と、DBのファイルシステム160とを移動体通信装置110内のメモリ(図示しない)に備えている。
例えば、移動体通信装置の代表例である携帯電話機へ始めてデータベースを搭載することを考える。従来の携帯電話機用プログラムの開発ではデータベースを用いていなかった。そのため、上位層アプリケーションではアドレス帳、スケジューラなどのデータアクセスには構造体を用いている。一方、DBでアクセスするためには、テーブル名、カラム名、カラムの型、サイズなど、細かい情報が必要になる。DBをアクセスするための汎用ミドル関数を作成する場合には、どのようなテーブルでもアクセスできるよう、テーブル名、カラム名などのDB情報を保持し、その情報を元に取得した値を上位層に返却しなくてはならない。
図1は、本発明の一実施の形態を示すシステム構成図である。
この実施形態のシステムでは、移動体通信装置110上で動作するユーザアプリケーション120と、SQLを解釈できるDB部150と、DB部150とユーザアプリケーション120を結ぶためのテーブル操作用API140と、テーブル操作用API140の中に組み込んだ構造体計算部141、構造体への値格納部142、値解析部143、DB制御部144と、DBのファイルシステム160とを移動体通信装置110内のメモリ(図示しない)に備えている。
例えば、移動体通信装置の代表例である携帯電話機へ始めてデータベースを搭載することを考える。従来の携帯電話機用プログラムの開発ではデータベースを用いていなかった。そのため、上位層アプリケーションではアドレス帳、スケジューラなどのデータアクセスには構造体を用いている。一方、DBでアクセスするためには、テーブル名、カラム名、カラムの型、サイズなど、細かい情報が必要になる。DBをアクセスするための汎用ミドル関数を作成する場合には、どのようなテーブルでもアクセスできるよう、テーブル名、カラム名などのDB情報を保持し、その情報を元に取得した値を上位層に返却しなくてはならない。
図1では、移動体通信装置110が携帯電話機に相当し、DB制御部144以下がすべて新規作成となる。ユーザアプリケーション120はできるだけ既存のプログラムを流用できるようにしておきたい。
ユーザアプリケーション120は、テーブル操作を行うために、カード型構造体231を作成し、内部で保持する。また、出力結果を得るため、構造体型231の領域を確保する。
ユーザアプリケーション120は、テーブル操作を行うために、カード型構造体231を作成し、内部で保持する。また、出力結果を得るため、構造体型231の領域を確保する。
カード型構造体231では、以下のような情報を持つ。
(1)フィールド番号、(2)名前、(3)型種別(dword,worDByte,stringなど)。
それぞれの型種別ごとに格納サイズは決まる。dwordであれば4バイト、wordは2バイト、byteは1バイト。string型の場合はサイズが決まらないため、別途サイズを格納する領域が必要である。32バイト分の文字列を格納するためには”string(32)”型と表記する。
構造体型132はC言語で使用される通常の構造体である。構造体のメンバは任意のものを受け取ることができる。構造体の詳細情報についてはカード型構造体131が持つ。
構造計算部141では、ユーザアプリケーション120から渡されたカード型構造体231から、実構造体の格納領域を計算する。
構造体への値格納部142では、DB制御部144によって、DBのファイルシステム160からDB部150を経由して取得されたデータを値解析部143で構造体格納用の値に変換し、構造体型132の領域に格納する。その際、構造体への格納は、名前参照を用いず直接アドレスを指定して値を格納する。指定する値は、構造計算部141で得られたメンバごとのオフセット値を、構造体の先頭アドレスに足したものを使用する。
(1)フィールド番号、(2)名前、(3)型種別(dword,worDByte,stringなど)。
それぞれの型種別ごとに格納サイズは決まる。dwordであれば4バイト、wordは2バイト、byteは1バイト。string型の場合はサイズが決まらないため、別途サイズを格納する領域が必要である。32バイト分の文字列を格納するためには”string(32)”型と表記する。
構造体型132はC言語で使用される通常の構造体である。構造体のメンバは任意のものを受け取ることができる。構造体の詳細情報についてはカード型構造体131が持つ。
構造計算部141では、ユーザアプリケーション120から渡されたカード型構造体231から、実構造体の格納領域を計算する。
構造体への値格納部142では、DB制御部144によって、DBのファイルシステム160からDB部150を経由して取得されたデータを値解析部143で構造体格納用の値に変換し、構造体型132の領域に格納する。その際、構造体への格納は、名前参照を用いず直接アドレスを指定して値を格納する。指定する値は、構造計算部141で得られたメンバごとのオフセット値を、構造体の先頭アドレスに足したものを使用する。
値解析部143では、DBのファイルシステム160から取得した値を構造体型132に格納できる形に変換する。
DB制御部144では、DB部150が受け取れる形式であるSQL文を作成し、直接にDB部150を操作する。
DB部150はデータベースエンジンであり、SQL文を受け付けて、ファイルシステム160に結果を記録する。
DB制御部144では、DB部150が受け取れる形式であるSQL文を作成し、直接にDB部150を操作する。
DB部150はデータベースエンジンであり、SQL文を受け付けて、ファイルシステム160に結果を記録する。
図2は、構造体メンバのオフセット計算で使用される各データの構成図である。
カード型構造体131は、構造体メンバごとに1枚のカードを持ち、その中に型情報をすべて格納しておく。そのカードを複数枚束ねると、テーブルを表現するための表形式となる。
表形式型201はデータ構造と値の両方を持つ。先頭行の項目名がデータ名を持ち、それぞれの型(word,dwordなど)が決まっている。次の行からは実際のデータが格納される。表形式はDBが使用する形式であり、実体の構造はユーザアプリケーション120から見えなくなっている。
構造体型132はユーザアプリケーション120が使用しやすいように構造体でアクセスできるようにしたデータ構造となる。ここにはデータの値のみが格納され、データの構造についてはヘッダファイル等に記載されることになる。構造体型132はカード型構造体131の値情報のみを取り出したものとみなすことができる。このように、カード型構造体131を経由することで、表形式型と構造体型との相互変換を可能にする。
カード型構造体131は、構造体メンバごとに1枚のカードを持ち、その中に型情報をすべて格納しておく。そのカードを複数枚束ねると、テーブルを表現するための表形式となる。
表形式型201はデータ構造と値の両方を持つ。先頭行の項目名がデータ名を持ち、それぞれの型(word,dwordなど)が決まっている。次の行からは実際のデータが格納される。表形式はDBが使用する形式であり、実体の構造はユーザアプリケーション120から見えなくなっている。
構造体型132はユーザアプリケーション120が使用しやすいように構造体でアクセスできるようにしたデータ構造となる。ここにはデータの値のみが格納され、データの構造についてはヘッダファイル等に記載されることになる。構造体型132はカード型構造体131の値情報のみを取り出したものとみなすことができる。このように、カード型構造体131を経由することで、表形式型と構造体型との相互変換を可能にする。
図3はテーブル操作用API140が上位から呼出しを受けてから値を返却するまでの処理の流れを示したフローチャートである。
まず、テーブル操作用API140が上位からの呼出しを受け、カード型構造体131の配列と構造体を受け取る(ステップ301)。
次に、構造計算部141が、引数で渡されたカード型構造体131の配列から構造体メンバのオフセットを計算する(ステップ302)。
次にDBのファイルシステム160から値を取得し、得た結果を構造体型132に格納可能な型に変換する(ステップ303)。
次に、取得した結果を引数で渡された構造体型132の領域に格納する(ステップ304)。その際、格納する領域はステップ302で計算されたオフセット値を使用する。
以上の手順により、カード型構造体131を受けて、構造体型132を返却するテーブル操作用API機能を実現することができる。
まず、テーブル操作用API140が上位からの呼出しを受け、カード型構造体131の配列と構造体を受け取る(ステップ301)。
次に、構造計算部141が、引数で渡されたカード型構造体131の配列から構造体メンバのオフセットを計算する(ステップ302)。
次にDBのファイルシステム160から値を取得し、得た結果を構造体型132に格納可能な型に変換する(ステップ303)。
次に、取得した結果を引数で渡された構造体型132の領域に格納する(ステップ304)。その際、格納する領域はステップ302で計算されたオフセット値を使用する。
以上の手順により、カード型構造体131を受けて、構造体型132を返却するテーブル操作用API機能を実現することができる。
図4は、図3のステップ302におけるオフセットを計算する処理の流れを示すフローチャートである。
構造体のメンバを配置する規則は規定されていないが、一般的なコンパイラでは以下のような規則がある。
(1)dword型のデータは4バイト境界に乗せる。
(2)word型のデータは2バイト境界に乗せる。
(3)byte型データは規定しない。
(4)string型データも規定しない。なおここで、string型はC言語のchar型配列で格納されるものと想定している。
バイト境界に乗らないデータがあった場合は、バイト境界に合わせるため、メンバ格納領域の直前に埋め草を作る。例えば、byte型の後にword型が来た場合、byte型の後に1バイトの埋め草が挿入される。
構造体のメンバを配置する規則は規定されていないが、一般的なコンパイラでは以下のような規則がある。
(1)dword型のデータは4バイト境界に乗せる。
(2)word型のデータは2バイト境界に乗せる。
(3)byte型データは規定しない。
(4)string型データも規定しない。なおここで、string型はC言語のchar型配列で格納されるものと想定している。
バイト境界に乗らないデータがあった場合は、バイト境界に合わせるため、メンバ格納領域の直前に埋め草を作る。例えば、byte型の後にword型が来た場合、byte型の後に1バイトの埋め草が挿入される。
この動作を前提として、オフセット値を計算する方法を以下に説明する。
まず、初期オフセットを“0”とする(ステップ401)。
次に、カードを1枚参照し、型を調べる(ステップ402)。そして、現在のオフセットが、型のバイト境界に入っているかどうかを調べる(ステップ403)。例えば、当該型がwordであったとき、オフセットが“2”で割り切れるかどうかを調べる。バイト境界が正しい場合は、現在のオフセットに値を格納する。正しくない場合は、バイト境界が正しくなるまで、オフセットを“+1”していく(ステップ404)。
次に、型のサイズ分、オフセットを増加する(ステップ405)。例えば、wordであれば“+2”、dwordであれば“+4”増加する。
カード型構造体の配列データがなくなるまでステップ402から繰り返す(ステップ406)。
まず、初期オフセットを“0”とする(ステップ401)。
次に、カードを1枚参照し、型を調べる(ステップ402)。そして、現在のオフセットが、型のバイト境界に入っているかどうかを調べる(ステップ403)。例えば、当該型がwordであったとき、オフセットが“2”で割り切れるかどうかを調べる。バイト境界が正しい場合は、現在のオフセットに値を格納する。正しくない場合は、バイト境界が正しくなるまで、オフセットを“+1”していく(ステップ404)。
次に、型のサイズ分、オフセットを増加する(ステップ405)。例えば、wordであれば“+2”、dwordであれば“+4”増加する。
カード型構造体の配列データがなくなるまでステップ402から繰り返す(ステップ406)。
図5は上記手順を元に、実例を示したものである。
カード型構造体データ510を用意する。オフセット計算520でメンバを1つずつ参照する。ステップ521では、byte型であるため、オフセットは“0”となり、次オフセットを“1”にする。
ステップ522では、オフセット1のところに、word型が出現したため、埋め草を挿入する。deptcdのオフセットは“2”となり、次オフセットは“4”となる。
ステップ523では、オフセット4のところに、dword型が出現したため、workのオフセットは“4”となる。
以上の手順により計算結果530が決定される。
カード型構造体データ510を用意する。オフセット計算520でメンバを1つずつ参照する。ステップ521では、byte型であるため、オフセットは“0”となり、次オフセットを“1”にする。
ステップ522では、オフセット1のところに、word型が出現したため、埋め草を挿入する。deptcdのオフセットは“2”となり、次オフセットは“4”となる。
ステップ523では、オフセット4のところに、dword型が出現したため、workのオフセットは“4”となる。
以上の手順により計算結果530が決定される。
なお、本発明は上述した機能に限定されるものではない。例えば、オフセット計算の計算規則を変更することで、埋め草の入れ方を使用するコンパイラに合わせることができる。また、入れ方を複数通り準備しておくことにより、オフセット計算規則が定まっていない環境での計算規則を推測することができる。
110…移動体通信装置、120…ユーザアプリケーション、131…カード型構造体、132…構造体型、140…テーブル操作API、141…構造計算部、142…構造体への値格納部、143…値解析部、144…DB制御部、150…DB部、160…DBのファイルシステム、301…テーブル、510…カード型データ、520…オフセット計算処理、530…計算結果601…ユーザアプリケーションプログラム、602…DAOクラス、603…テーブル型データ、604…DB依存Interface。
Claims (1)
- ユーザアプリケーションプログラムから構造体のメンバ毎に1枚のカード型構造体により構成される複数のカード型構造体を受取り、その受け取った各カード型構造体に格納された型情報によって各メンバの値の格納サイズを計算し、計算結果のメンバ値を格納する構造体の格納領域を作成する第1の手段と、前記複数のカード型構造体のそれぞれで指定されたメンバ値を下位層のデータベース等から取得する第2の手段と、取得したメンバ値を前記第1の手段で作成した格納領域の構造体に格納し、前記ユーザアプリケーションプログラムに返す第3の手段としてコンピュータを機能させるステップを備えることを特徴とするテーブル操作用インタフェースプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007054118A JP2008217439A (ja) | 2007-03-05 | 2007-03-05 | テーブル操作用インタフェースプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007054118A JP2008217439A (ja) | 2007-03-05 | 2007-03-05 | テーブル操作用インタフェースプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008217439A true JP2008217439A (ja) | 2008-09-18 |
Family
ID=39837400
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007054118A Pending JP2008217439A (ja) | 2007-03-05 | 2007-03-05 | テーブル操作用インタフェースプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008217439A (ja) |
-
2007
- 2007-03-05 JP JP2007054118A patent/JP2008217439A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111367976B (zh) | 基于java反射机制的excel文件数据的导出方法及装置 | |
CN104731589A (zh) | 用户界面的自动生成方法及自动生成装置 | |
CN108304676B (zh) | 装配体三维模型自动重建方法、终端设备及存储介质 | |
CN106796525B (zh) | 按需加载动态脚本语言代码以减少内存使用 | |
CN112256321A (zh) | 静态库打包方法、装置、计算机设备和存储介质 | |
CN108776587B (zh) | 数据获取方法、装置、计算机设备以及存储介质 | |
US11392765B2 (en) | Interpreting HL7 segment hierarchy dynamically | |
CN112068911B (zh) | 电子表单的生成方法、装置、系统、设备以及介质 | |
CN111274263A (zh) | 可视化数据库变更语句生成方法、装置及存储介质 | |
CN112764802A (zh) | 一种业务逻辑定制方法、装置、电子设备和存储介质 | |
KR20040097937A (ko) | 오브젝트 기반의 파이프라인을 채용한 시스템 및 방법 | |
EP3457274A1 (en) | System and method for creating domain specific language | |
CN110362630B (zh) | 数据管理方法、装置、设备与计算机可读存储介质 | |
US8433729B2 (en) | Method and system for automatically generating a communication interface | |
CN111930363B (zh) | 区块接口代码生成方法、及装置 | |
CN116521181B (zh) | 基于游戏系统的脚本数据处理方法、装置、设备及介质 | |
CN108664505B (zh) | 一种数据库表结构的导出方法及装置 | |
CN112306473A (zh) | 一种程序接口传参方法、系统及相关设备 | |
CN116028062A (zh) | 目标代码的生成方法、npu指令的显示方法及装置 | |
CN110795920A (zh) | 一种文档生成方法及设备 | |
CN114020278B (zh) | 数据处理方法、装置、设备及存储介质 | |
KR101828466B1 (ko) | 파일시스템을 기반으로 하는 저장장치에서 객체기반 스토리지 인터페이스를 제공하는 방법 및 장치 | |
US10310871B2 (en) | Non-transitory computer-readable recording medium storing control program, control device and control method | |
CN107092601B (zh) | 资源文件构建方法、资源文件应用方法及装置 | |
CN111581578B (zh) | 接口请求处理方法和装置 |