我正在将一个java项目转换为Objective c(在iOS上)。
然而,当我运行它时,它正在击中:
***由于未捕获的异常'JavaLangClassNotFoundException'终止应用程序,原因: 'java.lang.ClassNotFoundException:org.sqlite.JDBC'
我已经在源路径中添加了“$ CURRENT_DIR / libs / sqlite-jdbc-3.8.11.1.jar”。
我甚至试图从bitbucket获取源代码: https://bitbucket.org/xerial/sqlite-jdbc/commits/tag/sqlite-jdbc-3.7.2
然而,翻译后它给了我很多错误:
src-sqlite-test / org / sqlite / SQLiteErrorCode.java:88:错误:非法 开始表达 for(SQLiteErrorCode each:)
src-sqlite-test / org / sqlite / core / CorePreparedStatement.java:118:错误: ')'预计 switch(1. $ SwitchMap $ org $ sqlite $ SQLiteConfig $ DateClass [conn.dateClass.ordinal()]){
src-sqlite-test / org / sqlite / core / CorePreparedStatement.java:118:错误: case,default或'}'预期 switch(1. $ SwitchMap $ org $ sqlite $ SQLiteConfig $ DateClass [conn.dateClass.ordinal()]) {
另一个选择是使用ios本机sqlite库来访问数据库。
答案 0 :(得分:1)
考虑切换到SQLighter(https://github.com/vals-productions/sqlighter),这是一个Java ORM,它使用Android和iOS中内置的原生SQLite库。由于本机平台支持,它小而快,而且通常更容易将Java代码编写到ORM,需要更少的样板代码。
J2ObjC不支持JDBC,因为它对于移动应用程序来说是一个糟糕的选择(缓慢,笨重),数据库供应商也不提供iOS版本的驱动程序。从理论上讲,你可以通过移植JDBC来移植Xerial,但这是一个很大的任务,可能在你的应用程序中表现不佳。 j2objc团队有一句话适用于此:"只是因为某些可以被翻译并不意味着它应该是。" : - )