当前位置: 首页 > 面试题库 >

Java-JDBC替代品

桑睿识
2023-03-14
问题内容

这只是理论问题。

我将JDBC与Java应用程序一起使用,以使用数据库(选择,插入,更新,删除等)。我制作了“手动” Java类,它将包含来自数据库表的数据(属性=
db列)。然后,我进行查询(ResultSet),并用数据填充这些类。我不确定这是否正确。

但是我已经阅读了很多有关JDO和其他持久性解决方案的信息。

有人可以根据他们的经验推荐最佳使用的JDBC替代品吗?

我还想知道JDO相对于JDBC的优势(简单来说)。

我已经可以在Google上搜索很多此类内容,但是“第一手资料”的观点总是最好的。

谢谢


问题答案:

Java中的数据库持久性故事已经很久了,而且充满曲折:

  • JDBC每个人 最终用来与数据库对话的低级API 。但是,如果不使用更高级别的API,则您必须自己完成所有繁琐的工作(编写SQL查询,将结果映射到对象等)。

  • EJB 1.0 CMP Entity Beans 是对更高级别的API的首次尝试,并且已被大型Java EE提供程序(BEA,IBM)成功采用,但未被用户采用。实体Bean太复杂且开销太大(理解,性能不佳)。 失败!

  • EJB 2.0 CMP 试图通过引入本地接口来降低Entity Bean的某些复杂性,但是大多数复杂性仍然存在。EJB 2.0也缺乏可移植性(因为对象关系映射不是规范的一部分,因此部署描述符是专有的)。 失败!

  • 然后是 JDO ,它 对象持久性的数据存储不可知标准(可以与RDBMS,OODBMS,XML,Excel,LDAP一起使用)。但是,尽管有几种开源实现,并且小型独立供应商采用了JDO(大多数OODBMS供应商希望JDO用户以后再从其RDBMS数据存储切换到OODBMS,但是显然这从未发生),但是它失败了被大型Java EE参与者和用户采用(因为编织是开发时的痛苦,并且使一些客户害怕奇怪的查询API,实际上太抽象了)。因此,尽管标准本身还没有失效,但我认为它是一个失败。 失败!

  • 确实,尽管存在两个标准,但由于对象对关系数据库的持久性(标准之间的竞争,JDO的位置不明确,早期的失败),与EJB CMP和JDO相比,用户更喜欢使用诸如 Toplink ,旧播放器或 Hibernate之 类的专有API 。我相信CMP和不良行销是其中的一部分责任),而Hibernate实际上已成为该领域事实上的标准(这是一个很好的开源框架)。 成功!

  • 然后,Sun意识到他们必须简化事情(并且通常是整个Java EE),并且他们使用 JPA (Java持久性API )在Java EE 5中完成了该工作,它是EJB 3.0的一部分,是对象到关系数据库持久性的新标准。 。JPA统一了EJB 2 CMP,JDO,Hibernate和TopLink API /产品,并且似乎在EJB CMP和JDO失败(易于使用和采用)的地方成功了。 成功!

总而言之,Java的 数据库持久性 标准是 JPA, 并且应该优先于其他专有API(使用Hibernate的JPA实现很好,但使用JPA
API),除非您不需要ORM。与JDBC相比,它提供了更高级别的API,旨在节省您大量的手工工作(这是简化的方法,但仅此而已)。



 类似资料:
  • 问题内容: 我需要将while循环暂停特定的毫秒数。我尝试使用,但是它不准确,尤其是在循环场景中。毫秒精度在我的程序中很重要。 这是我不希望在expectedElapsedTime通过之前检查条件的算法。 问题答案: 你能指望什么? 如果您进入睡眠状态,则一旦您的进程再次可运行,就必须等待线程调度程序再次对其进行调度。 我的意思是如果您进入睡眠状态50秒钟,这并不意味着您的进程将在完全50秒钟内运

  • 我正在寻找某种替代ImageJ(http://imagej.nih.gov/ij/)。对于那些不知道的人来说,ImageJ非常适合从用户编写的脚本中分析和创建这些tif文件。然而,我注意到在java项目中使用它(使用它的jar)是相当资源密集型的。我想知道是否有一些替代方案,也许对开发人员来说更好(不需要图形用户界面,但对内存更有效)。

  • 问题内容: 很多年前我使用过XStream,但是我发现自2008年以来就没有更新这些库(最新消息)。现在是否有一个更现代且最新的Java XML序列化库? 问题答案: 按照偏好,相关性和活动的顺序: 访问JAXB项目的站点,以查看教程和指南。还可以查看原始的JAXB体系结构白皮书。 上面列出的JAXB项目是API的参考实现,并由GlassFish Application Server打包在其中。

  • 问题内容: 我正在尝试为项目创建一个简单的Web浏览器,但是我正在使用JEditorPane呈现和显示HTML。我听说不应将JEditorPane用作浏览器组件,因为它不支持HTML3.2之上的任何功能(即使那样也无法正确显示它),但是我似乎找不到HTML5的替代方法。谁能帮我?提前致谢。 问题答案: 您可以使用JavaFX-2 Webview。从JavaFX-2 Adding HTML Cont

  • 问题内容: 我一直在尝试设计一种用Pattern / Matcher实例替换多个String#replaceAll调用的方法,希望它比我当前在String中替换文本的方法要快,但是我不确定该怎么做关于它。 这是我要操作的字符串的示例: 如您所见,有多个@字符,中间有3个字符。情况总是如此。如果我想替换“ @ xxx @”的每个实例(其中xxx可以是0到9之间的任何小写字母或数字),最有效的解决方法

  • 我试图建立一个替代密码。对于我的密钥,我使用一个随机的256字节数组,它是256个可能字节值的排列。 这是通过以下方式设置的: 然后,我用以下方法对消息进行编码/解码: 在这个过程中,有些东西出了问题,我解码的任何东西都会作为一个 我不确定自己哪里出错了,也不确定这是否是最高效的做事方式,我必须保持相同的函数签名和通用方法,但实现细节由我决定。 感谢任何和所有的帮助。