在 Google-App-Engine 中使用 HSQLDB
Posted
技术标签:
【中文标题】在 Google-App-Engine 中使用 HSQLDB【英文标题】:Using HSQLDB in Google-App-Engine 【发布时间】:2011-05-04 16:04:46 【问题描述】:在可在 google-app-engine 上运行的轻型网络应用中,我想使用 HSQLDB。
在启动 HSQLDB 时,我使用的是这样的 url:“jdbc:hsqldb:file:./database/”。
在本地 tomcat 上一切正常,但在 google-app-engine 上我得到以下异常;
Constructor threw exception; nested exception is com.hp.hpl.jena.sdb.SDBException: SQL Exception while connecting to database: jdbc:hsqldb:file:./database/appname : File input/output error ./database/appname.properties java.security.AccessControlException: access denied (java.io.FilePermission ./database write)
有没有人可以提供线索来定义在 google-app-engine 上运行 HSQL 数据库的正确 url?
【问题讨论】:
App Engine 应用程序无法写入文件系统。使用数据存储来存储数据。 【参考方案1】:我认为 GAE 不允许您在这个级别编写文件。
您可以使用 HSQLDB 内存数据库,它不需要文件,但在您的应用重新启动时会被删除。
你为什么不使用 JDO ?
【讨论】:
在应用程序中,需要存储和查询RDF文档。为了实现这一点,应用程序的架构基于 Jena SDB。因为,我需要一个传统的数据库。 我认为现在 Google 已经将 mysql 作为服务。但你必须为此付出代价。【参考方案2】:在 GAE 中你不能写入文件,这显然意味着 HSQLDB 不能在 GAE 上工作。正如 Mikhas 建议的那样,您可以在内存中使用 HSQLDB,它不会在任何地方持久化。 如果您使用的是 GAE,则除了使用 JDO 或 JPA 之外别无选择。 Appengine 已针对其进行了优化。但将来我们可能会支持在应用引擎中使用关系数据库。但就目前而言,答案是否定的。
【讨论】:
您还可以使用原生 Datastore API 和其他 ORM 工具,例如 objectify 或 twig。【参考方案3】:(也是开源 Java)H2 database 可能会起作用。请参阅项目H2GAE(请不要它是实验性的)。不过,我自己并没有对此进行测试。
【讨论】:
以上是关于在 Google-App-Engine 中使用 HSQLDB的主要内容,如果未能解决你的问题,请参考以下文章
google-app-engine:google api python客户端hello world中的ImportError httplib2
google-app-engine 是不是有“required_admin”方法
rdbms API 不可用,因为无法加载 MySQLdb 库