1

データベースに格納するオブジェクトごとにクラスファイルを手動でコーディングしたり、必要なすべてのメソッドを使用してDatabaseHelperクラス全体を手動で入力したりするなど、多くの不必要な作業が必要になるようです。

私は、最小限のデータ(データベースの必要な構造)を提供することによって、これをすべて自動的に生成する方法を見つけようとしています。これは、1つの場所で1回だけ入力する必要があります。これをxmlに入れて、配列で宣言し、オブジェクトクラスのコードアノテーションでも宣言しようとしましたが、うまくいく解決策が見つかりませんでした。

私が達成しようとしていることの大まかな例として、データベースの目的の構造を説明する配列を次のように提供できます。接尾辞「Cols」が付いたNB配列は、そのテーブルで必要な列を表し、接尾辞「Opts」は、それらの列に必要なsqlite制約を表します。

static final String[] tables = {"Processes", "Machines", "Suppliers","machinesSuppliersLink"};


static final String[] processesCols = {  // tables[0]
    "ProcessID" ,
    "FullName" ,
    "ShortName" ,
    "Machines"};
static final String[] processesOpts = {
    "INTEGER PRIMARY KEY AUTOINCREMENT" , 
    "TEXT" , 
    "TEXT" , 
    "INTEGER, FOREIGN KEY(Machines) REFERENCES Machines (MachinesID)"};
static final String[][] processes = { processesCols , processesOpts };


static final String[] machinesCols = {  // tables[1]
    "MachinesID" , 
    "Manufacturer" , 
    "MachinesName",
    "Process"
};
static final String[] machinesOpts = {
    "INTEGER PRIMARY KEY AUTOINCREMENT",
    "TEXT",
    "TEXT",
    "INTEGER, FOREIGN KEY(Process) REFERENCES Processes (ProcessID)"
};
static final String[][] machines = { machinesCols , machinesOpts };


static final String[] suppliersCols = {  // tables[2]
    "SuppliersID",
    "SuppliersName",
    "SuppliersPhone",
    "SuppliersWebsite",
    "SuppliersAddress",
};
static final String[] suppliersOpts = {
    "INTEGER PRIMARY KEY AUTOINCREMENT",
    "TEXT",
    "INTEGER",
    "TEXT",
    "TEXT",
};
static final String[][] suppliers = { suppliersCols , suppliersOpts };


static final String[] machinesSuppliersLinkCols = {  // tables[3]
    "machinesSuppliersLinkID",
    "MachinesID",
    "SuppliersID"       
};
static final String[] machinesSuppliersLinkOpts = {
    "INTEGER PRIMARY KEY AUTOINCREMENT",
    "INTEGER, FOREIGN KEY(MachinesID) REFERENCES Machines (MachinesID)",
    "INTEGER, FOREIGN KEY(SuppliersID) REFERENCES Suppliers (SuppliersID)",
};
static final String[][] machinesSuppliersLink = { machinesSuppliersLinkCols , machinesSuppliersLinkOpts };

public static final String[][][] schema = { processes , machines , suppliers ,  machinesSuppliersLink};

必要なDatabaseHelper、クラスなどを自動的に生成する手順の概要を説明してください。

どうもありがとう。

PS上記のデータを入力して、テーブルごとにクラスを作成する方が良い出発点になると思いますが、この方法でポイントがより明確に示されると感じました。

4

1 に答える 1

1

最近、android-activerecordというプロジェクトに出くわしました。単純なJavaクラスからすべてのsqlfooを生成します。さまざまなクラスをインスタンス化して、インスタンスでsave()を呼び出すだけです。

http://code.google.com/p/android-active-record/

于 2012-04-09T19:15:25.880 に答える