在 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-app-engine:google api python客户端hello world中的ImportError httplib2

google-app-engine 是不是有“required_admin”方法

rdbms API 不可用,因为无法加载 MySQLdb 库

HttpClient 抛出 ssl 错误,但 webview 和 HttpsURLConnection 不会

如何让内置标签“url”工作?