2010-08-11 63 views
5

我在android应用程序使用的项目中使用SQLite。目前我正在使用android.database.sqlite中提供的SQLite实现。Android上的可移植JDBC vs SQLite

我想制作一个使用相同代码库的桌面应用程序。所以我需要将所有的共享行为分离到一个单独的可移植项目/ jar中。

我的问题是我目前正在大量使用android.database.sqlite。如果可能的话,我不想重写每一个数据库访问调用来与JDBC兼容,或者我不得不使用android提供的SQLite。

解决此问题对现有代码的影响最小。我打算写一个SQLite接口(兼容android.database.sqlite)共享代码将使用...在Android上,它将被实现android.database.sqlite平凡,并在桌面上它将通过JDBC来实现,通过JDBC来匹配android.database.sqlite

这证明很困难,因为我经常提供Object[]数组来绑定到JDBC需要严格键入的预处理语句,而我对JDBC根本不熟悉。

是否有任何其他方式使用Java中的SQLite类似于android.database.sqlite或其他任何可以节省我与重写许多数据库访问点相关的工作(以及不可避免的调试)的方法?

Disclamer:我从来没有尝试过使用JDBC。

简化问题:什么是在Java中使用SQLite的最佳方式? JDBC,其他?

回答

3

我认为创建一个包装将是一个好主意,但在开发和测试方面可能会涉及很多努力。也许你可以在谷歌上开始一个项目,并获得更多人参与。

在一个侧面说明,我相信已经有谷歌代码这样一个项目叫做sqldroid

+0

感谢您的链接,它看起来很有希望。我正在考虑将反向接口'JDBC看起来像SQLite',而不是另一个,它似乎不可行。 – Akusete 2010-08-11 05:46:53

0

您可以为您的域名,从而延长了BCE模式BCDE创造这样一个DataMapper的。数据映射器的作用是从底层数据库技术抽象因此增加之后重用

1

这里是我会做什么:

  1. 创建数据库操作的接口。它将包括添加,修改,删除记录以及根据需要保存/提交的方法。此界面可以根据需要进行扩展。
  2. 为JDBC/SQLite创建一个实现。有一个配置条目可以在构建时选择适当的实现。

这意味着你的情况是:

  1. 创建接口。
  2. 创建一个内部使用SQLite的实现。
  3. 创建一个内部使用某些JDBC实现的实现。

这样,您的应用程序将从正在使用的底层数据库中抽象出来。这将改善便携性。

+0

我不确定您的意思是特定领域的界面。如果是这样,那么问题将是我需要重新做每个项目的绑定(提前思考)。如果不是这样,那么这又似乎是一种浪费,因为JDBC被认为只是......为什么要重新创建轮子。但我认为你的哲学是正确的,+1。 – Akusete 2010-08-11 11:54:25

+0

@Akusete他正在谈论DAO模式 – naikus 2010-08-11 14:24:07