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

将SQLite与我的JavaEE应用程序集成的正确方法是什么?,java,sqlite,jakarta-ee,Java,Sqlite,Jakarta Ee,我希望将一个非常简单的SQLite数据库添加到现有的JavaEE应用程序中。我非常习惯使用EJB、ORMs、EntityManager等来处理SQL数据库。我从未在Java中使用过某种ORM来处理关系数据库 我被推荐使用,而不是JDBC驱动程序-所以我有点赤裸裸,ORM不太正确?。我想让它快速启动并运行 上下文 我一直在使用一个内存缓存,实现为一个映射,它随着时间的推移线性地被条目填充。在某些情况下,比如应用程序在夜间运行时,缓存将使用所有可用的堆空间。因此,将缓存作为SQLite数据库存储在磁

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

我被推荐使用,而不是JDBC驱动程序-所以我有点赤裸裸,ORM不太正确?。我想让它快速启动并运行

上下文 我一直在使用一个内存缓存,实现为一个映射,它随着时间的推移线性地被条目填充。在某些情况下,比如应用程序在夜间运行时,缓存将使用所有可用的堆空间。因此,将缓存作为SQLite数据库存储在磁盘上,而不是作为Java映射存储在内存中

问题 我应该如何像这样管理资源?通常情况下,我会让容器担心所有这些,但因为我没有使用JDBC,所以我必须做所有这些!@$%手工制作,非增值的东西-对吗? 有没有一种方法可以干净透明地实现这一点?我希望能够交换掉一个实现类,例如用FooSQLiteCacheImpl替换FooMapCacheImpl。 [大多数]方法仅限于用于打开连接的螺纹。有没有一种简单、直接的方法来确保我不会尝试从打开SQLiteConnection的线程以外的线程访问它? …问题的另一面是:每次我想读/写数据库时,是否可以避免创建新连接?必须管理每个线程的连接,而不是每个实例的连接,这似乎是一个真正的PITA,我过去一直在考虑如何与数据库通信。 大体上 当涉及到在Java/JavaEE中使用数据库而不使用ORM时,我相当困惑。
正确的方法是什么?

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

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

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


希望这能有所帮助。

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

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

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


希望这有帮助。

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

问候,


Dave

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

问候,


Dave

我不认为使用JDBC来实现映射并将所有内容保存到数据库的前端太难,但在这样做之前,请三思。整个系统的性能可能会受到严重影响

但是,如果问题的根本原因是堆空间不足,那么您应该考虑一下。然而,它是一种商业非免费产品

Terracotta也有一个非常好的缓存框架,它是开源的。看看这本食谱,它可能会鼓舞人心

如果您想手工完成所有工作,并且不介意使用Spring,请尝试SpringJDBC。它很容易与任何JDBC驱动程序集成。看一看。它为你做了所有的锅炉铭牌代码。您可能还应该使用连接池,例如

最容易使用的SQLite JDBC驱动程序是。因为它不依赖于JNI。它可能没有那么快,但对于快速测试来说,它是完美的

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


我希望这能帮到你。

我认为做一个fr并不难 ont end将使用JDBC实现映射并将所有内容保存到数据库,但在执行此操作之前,请三思。整个系统的性能可能会受到严重影响

但是,如果问题的根本原因是堆空间不足,那么您应该考虑一下。然而,它是一种商业非免费产品

Terracotta也有一个非常好的缓存框架,它是开源的。看看这本食谱,它可能会鼓舞人心

如果您想手工完成所有工作,并且不介意使用Spring,请尝试SpringJDBC。它很容易与任何JDBC驱动程序集成。看一看。它为你做了所有的锅炉铭牌代码。您可能还应该使用连接池,例如

最容易使用的SQLite JDBC驱动程序是。因为它不依赖于JNI。它可能没有那么快,但对于快速测试来说,它是完美的

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


我希望这会对您有所帮助。

谢谢您的回复。我最终可能会切换到JDBC驱动程序,但高层强烈建议使用Java包装器。关于那条路线有什么建议吗?谢谢你的回复。我最终可能会切换到JDBC驱动程序,但高层强烈建议使用Java包装器。关于这条路线有什么建议吗?我们发现性能要高得多,主要是因为他们在JAR文件中捆绑了一些平台的本机驱动程序。Derby还可以,但它会打开很多文件,并且会受到损坏,尤其是在Windows设备上。Xerial似乎通过删除繁琐且容易出错的JNI安装程序而做到了这一点。我一定要试试!我必须承认zentus的实现不是很好。然而,我确实认为使用jdbc可能不是解决这个问题的最佳解决方案,用更灵活的缓存实现(如ehcache)替换现有缓存可能是更好的选择。我打开了,因为我认为您不使用数据库是正确的。如果您有任何关于Ehcache的进一步建议,我们将不胜感激。。谢谢你的建议!我们发现,性能要高得多,这主要是因为它们将一些平台的本机驱动程序捆绑在JAR文件中。Derby还可以,但它会打开很多文件,并且会受到损坏,尤其是在Windows设备上。Xerial似乎通过删除繁琐且容易出错的JNI安装程序而做到了这一点。我一定要试试!我必须承认zentus的实现不是很好。然而,我确实认为使用jdbc可能不是解决这个问题的最佳解决方案,用更灵活的缓存实现(如ehcache)替换现有缓存可能是更好的选择。我打开了,因为我认为您不使用数据库是正确的。如果您有任何关于Ehcache的进一步建议,我们将不胜感激。。谢谢你的建议!不久前,我去寻找类似的东西。这是我从SO社区得到的信息:我前段时间去寻找类似的东西。以下是我从SO社区得到的信息:我就这件事公开了。如果有任何关于伯克利DB的进一步建议,我们将不胜感激。我也回答了这个问题。有几个选项可以提供简单的数据持久性。其中一些是在另一个线程中推荐的。一个问题是,以后还有哪些功能对应用程序很重要?作为一个数据库开发者,我认为数据库和简单的持久性库之间有很大的区别。BDB设计为高性能、可扩展和高效。它提供ACID事务、恢复和复制HA,所有这些都在一个小于1MB的库中。祝您搜索顺利,如果我们能提供帮助,请告诉我们。达维就这件事开门见山。如果有任何关于伯克利DB的进一步建议,我们将不胜感激。我也回答了这个问题。有几个选项可以提供简单的数据持久性。其中一些是在另一个线程中推荐的。一个问题是,以后还有哪些功能对应用程序很重要?作为一个数据库开发者,我认为数据库和简单的持久性库之间有很大的区别。BDB设计为高性能、可扩展和高效。它提供ACID事务、恢复和复制HA,所有这些都在一个小于1MB的库中。祝您搜索顺利,如果我们能提供帮助,请告诉我们。戴夫