我希望将一个非常简单的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
。在使用Java / Java EE中的数据库时,我很遗憾,而不使用ORM 什么是正确的方法?
答案 0 :(得分:3)
我不认为使用JDBC实现Map并使用JDBC将所有内容保存到数据库的前端太难了,但在此之前,请三思而后行。整个系统的性能可能会受到严重影响。
但是,如果问题的根本原因是缺少堆空间,则应该查看Terracotta's BigMemory。但是,它是一种商业(非免费)产品。
Terracotta有一个非常好的缓存框架以及(ehcache),它是开源的。看看食谱,它可能会鼓舞人心。
如果您想手动完成所有操作,并且不介意使用Spring,请尝试使用spring-jdbc。它可以很容易地与任何JDBC驱动程序集成。看看SimpleJdbcTemplate。它为您完成所有锅炉板代码。您也应该使用连接池,例如commons-dbcp
最简单的SQLite JDBC驱动程序是this one。因为它不依赖于JNI。它可能不会那么快,但为了快速测试它是完美的。
如果您没有绑定到SQLite,您可以查看其他可用的JDBC解决方案,例如hsqldb或derby
我希望这会帮助你。
答案 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会引用其中的一些。
希望这有帮助。