我正在开发一个我想在 Android 和桌面上使用的 Java 库。Android 提供了android.database.sqlite
我想使用的类,但显然在桌面系统上不可用。(这是唯一的 Android 依赖项。)
我对Java相当陌生。如果这是 C 或 C++,我会使用不同版本的包装类来访问 SQLite,具体取决于平台。在 Java 中是否有可能发生这样的事情,如果可以,怎么做?这是处理这个问题的最好方法吗?
public interface DbAccessLibrary ..
public class AndroidDbAccessLibrary implements DbAccessLibrary ..
public class DesktopDbAccessLibrary implements DbAccessLibrary ..
DbAccessLibrary accessLibrary;
try {
getClass().getClassLoader().loadClass("android.database.sqlite.SQLiteDatabase");
accessLibrary = new AndroidDbAccessLibrary();
} catch (ClassNotFoundException ex) {
accessLibrary = new DesktopDbAccessLibrary();
}
如果您想要便携,则不能android.database.sqlite
直接使用,您必须按照@msh 的建议将其隐藏在界面后面。您可以为此使用现有接口,而不是发明自己的接口:java-jdbc:
我创建了一个可移植的 android/java-se 库,可以在 csv 和 sqlite 数据库之间进行转换。
库初始化获得一个 jdbc 驱动程序 (java.sql.Driver),它允许访问其他 jdbc 接口(连接、语句......)
您可以在 android 端使用org.sqldroid.SQLDroidDriver一个开源的 android jdbc 驱动程序,在 java-se 端使用 org.sqlite.JDBC。
我在 android 端使用 jdbc driver-manager 时遇到问题,所以我
new org.sqldroid.SQLDroidDriver()
在 android 客户端使用它来初始化库
我的便携式库以 3 个库结尾:
目前平台特定部分只有日志记录(由 log4j 或 android 日志记录实现)。
csv lib 在两个平台上都运行良好,因为 java-se 上的集成测试比 android 端容易得多。这是一个技术库。
但是我未能将业务代码放入共享库中。许多 android api-s 依赖于 android-sandbox (上下文),其中活动、广播……是从其中继承的,并且在 java-se 中不存在。