1

似乎有很多不必要的工作需要为每个要存储在数据库中的对象手动编码一个类文件,以及手动输入一个包含所有必要方法的整个 DatabaseHelper 类等。

我一直在尝试通过提供最少的数据(数据库所需的结构)来找到一种自动生成这一切的方法。这应该只需要在一个位置输入一次。我试过把它放在 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 类生成所有 sql foo。您可以实例化不同的类并简单地在实例上调用 save() 。

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

于 2012-04-09T19:15:25.880 回答