将SQLite与我的Java EE应用程序集成的正确方法是什么?

时间:2011-01-17 23:01:18

标签: java sqlite java-ee

我希望将一个非常简单的SQLite数据库添加到现有的Java EE应用程序中。我非常习惯使用EJB,ORM,EntityManager等来处理SQL数据库。我从来没有使用某种ORM来处理Java中的关系数据库。

我一直“推荐”使用a Java wrapper for SQLite而不是JDBC驱动程序 - 所以我有点赤裸裸,没有ORM(对吧?)。我想快速启动并运行。

上下文

我一直在使用内存缓存,实现为Map,随着时间的推移线性填充条目。在某些时候,就像应用程序在一夜之间运行一样,缓存将使用所有可用的堆空间。因此,将缓存存储在磁盘上(作为SQLite数据库)而不是存储在内存中(作为Java Map)。

问题

  • 我应该如何管理SQLiteConnection等资源?通常我会让容器担心所有这些,但由于我不使用JDBC,我必须做所有这些 !@#$%ing,non-value-added stuff手动 - 对吧?
  • 有没有办法实现干净透明?我希望能够只是换掉一个实施类 - 例如将FooMapCacheImpl替换为FooSQLiteCacheImpl
  • “[Most]方法仅限于用于打开连接的线程”。是否有一种简单,直接的方法可以确保我不会尝试访问{{1除了打开它的线程之外的其他线程?
  • ...问题的另一面:每次我想要读/写数据库时,我都可以避免创建新连接吗?似乎 bona fide PITA必须管理每个线程的连接,而不是每个实例,这就是我过去一直在考虑与数据库通信的方式。

基本上

在使用Java / Java EE中的数据库时,我很遗憾,而不使用ORM 什么是正确的方法?

3 个答案:

答案 0 :(得分:3)

我不认为使用JDBC实现Map并使用JDBC将所有内容保存到数据库的前端太难了,但在此之前,请三思而后行。整个系统的性能可能会受到严重影响。

但是,如果问题的根本原因是缺少堆空间,则应该查看Terracotta's BigMemory。但是,它是一种商业(非免费)产品。

Terracotta有一个非常好的缓存框架以及(ehcache),它是开源的。看看食谱,它可能会鼓舞人心。

如果您想手动完成所有操作,并且不介意使用Spring,请尝试使用spring-jdbc。它可以很容易地与任何JDBC驱动程序集成。看看SimpleJdbcTemplate。它为您完成所有锅炉板代码。您也应该使用连接池,例如commons-dbcp

最简单的SQLite JDBC驱动程序是this one。因为它不依赖于JNI。它可能不会那么快,但为了快速测试它是完美的。

如果您没有绑定到SQLite,您可以查看其他可用的JDBC解决方案,例如hsqldbderby

我希望这会帮助你。

答案 1 :(得分:1)

您可能还想查看Berkeley DB Java版。它允许您直接在库中持久化和管理Java对象,而无需ORM(以及相关的开销)。它在Android上运行,它是一个Java库,可以管理从非常小到非常大的数据集。它的设计考虑了Java应用程序开发人员,应该比ORM + RDBMS解决方案更快,更简单。您可以在我们的网站Oracle Berkeley DB Java Edition找到更多相关信息。

问候,

戴夫

答案 2 :(得分:0)

sqlite4java包装器基本上是一个JNI包装器,它远不是你想要的。 像eclipseLink这样的ORM无论如何都是JDBC之上的层,实体管理器总是最终使用JDBC访问。

相反,sqlite4java允许您在java中调用SQLite,而不必自己完成所有JNI包装。

如果您想使用ORM和您首选的实体管理器,那么您应该使用JDBC驱动程序,而sqlite4java wiki会引用其中的一些。

希望这有帮助。