Java Android/SQLite对象关系映射的简单替代方案

Java Android/SQLite对象关系映射的简单替代方案,java,android,Java,Android,我正在寻找让OOP和RDBMS很好地协同工作的简单技术 我希望它尽可能简单,因此没有自动代码生成或ORM包,但可能只有POJO,每个DB表一个,具有返回游标的fetchOne(int DB_row_id)和fetchAll()等方法 我一直遇到的问题是,在一个联接中,在何处放置查询两个或多个表的方法,因为表示一个表的POJO也必须对其他表有相当多的了解 我能想到的唯一替代方法是只使用一个类来处理ORM,这个类大约有50-100个方法,每个方法在一个或多个表上执行自己的查询,并返回一个普通游标 哎

我正在寻找让OOP和RDBMS很好地协同工作的简单技术

我希望它尽可能简单,因此没有自动代码生成或ORM包,但可能只有POJO,每个DB表一个,具有返回游标的fetchOne(int DB_row_id)和fetchAll()等方法

我一直遇到的问题是,在一个联接中,在何处放置查询两个或多个表的方法,因为表示一个表的POJO也必须对其他表有相当多的了解

我能想到的唯一替代方法是只使用一个类来处理ORM,这个类大约有50-100个方法,每个方法在一个或多个表上执行自己的查询,并返回一个普通游标


哎呀

我并不喜欢这样做,但我通常会创建一个表示每个表的类,然后为我的所有访问创建“提供者”类(CRUD操作)

例如,假设我有一个GameState类和一个PlayerInfo类,它们都表示数据库中的表。游戏状态可以有一个
列表
。我可以让我的GameStateProvider能够进行连接并填充我的
列表
,或者让PlayerInfo提供程序将引用传递给我的GameStateProvider的get方法,我通常会执行后者。表示db对象的POJO通常也有一个接受游标的构造函数


我不喜欢这个解决方案,但它将我所有的类保留在最少的方法中,并使它们可读性好,彼此之间的联系不太紧密。

我不喜欢我这样做的方式,但我通常会创建一个表示每个表的类,然后为我所有的访问(CRUD操作)创建“提供者”类

例如,假设我有一个GameState类和一个PlayerInfo类,它们都表示数据库中的表。游戏状态可以有一个
列表
。我可以让我的GameStateProvider能够进行连接并填充我的
列表
,或者让PlayerInfo提供程序将引用传递给我的GameStateProvider的get方法,我通常会执行后者。表示db对象的POJO通常也有一个接受游标的构造函数

我不喜欢这个解决方案,但它将我所有的类都保留在最少的方法中,并且使它们可读,并且彼此之间没有太紧密的联系

我希望它尽可能简单

问题是,这不是一项简单的任务。这就是人们使用ORM库的原因,也是这些库如此之大的原因

可能只是POJO,每个DB表一个,使用fetchOne(int DB_row_id)和fetchAll()等方法

我看得出你要做什么了。不要去那里!你会得到好几英里的意大利面代码。我看过了,不好看。您应该使用ORM库,或者想出一些不使用关系数据库的方法来存储数据

我希望它尽可能简单

问题是,这不是一项简单的任务。这就是人们使用ORM库的原因,也是这些库如此之大的原因

可能只是POJO,每个DB表一个,使用fetchOne(int DB_row_id)和fetchAll()等方法


我看得出你要做什么了。不要去那里!你会得到好几英里的意大利面代码。我看过了,不好看。您应该使用ORM库,或者想出一些不使用关系数据库的方法来存储数据。

使用对象数据库作为db4o也可以,这是最简单的代码方式,因为不需要映射。
当然,您根本不会使用SQLite。

使用对象数据库作为db4o也可以,这是最简单的代码,因为不需要映射。
当然,您根本不会使用SQLite。

谢谢-问题是,正如在中所讨论的,它仍然不是一个理想的解决方案,我认为我应该尽可能使用Android的游标。我对Java有很多经验,只是不在Android上。Hibernate或OpenJPA是可行的解决方案吗?或者它们太重而不能在移动设备上运行?因为android运行的是Dalvik而不是Java字节码,所以任何依赖字节码生成的库都无法工作。这消除了Hibernate等。谢谢-问题是,正如在中讨论的,它仍然不是一个理想的解决方案,我认为我应该尽可能使用Android的游标。我对Java有很多经验,只是不在Android上。Hibernate或OpenJPA是可行的解决方案吗?或者它们太重而不能在移动设备上运行?因为android运行的是Dalvik而不是Java字节码,所以任何依赖字节码生成的库都无法工作。这就消除了冬眠等问题。在;因此,通常用于讨论特定代码的特定问题;因此,通常用于讨论特定代码的特定问题。