2010-04-08 42 views
5

一个简单的问题:在Java/JDBC中访问数据库的更有效方法是什么? 我是一个web开发人员,我想写一些可重用和可扩展的代码。
对我来说有趣的是使用ResultSupport这样的工具:它在资源使用方面是否过于膨胀?
你能提出什么建议?访问数据库的Java高效策略

回答

5

不仅仅是JDBC具体,只是一般的SQL东西

  1. 如果您必须重新运行一个查询多次,利用PreparedStatement。如果可用,请使用存储过程。 YMMV显然不便携。

  2. 如果您不使用它,请始终关闭您的ResultSet或Statement。关闭语句将自动关闭与该语句关联的所有ResultSet。关闭ResultSet仍然是一个好习惯。

  3. 尝试限制可查询的内容,例如:从XXX和YYY之间的order_date订单中选择*。在MySQL中,查询可能是全表扫描或“范围”,具体取决于返回的数据量。因此,决定如何'灵活'你想要你的查询

  4. 如果你正在使用MySQL,请使用解释来优化您的查询。如果您使用的是JPA,那么您不会看到生成的SQL。 (这不完全是JDBC)您可能希望在ORM管理器上启用日志记录以显示使用的SQL语句。然后使用解释来优化。如果ORM生成真正复杂的查询,则可能需要使用@NamedNativeQuery

  5. 如果您的JDBC驱动程序支持批量更新,请使用它。 PreparedStatement和ResultSet支持批量更新。

  6. 您也可以控制提交。如果您正在执行大量更新,请将其关闭。你自己调用commit()。

-1

我认为最简单和最常用的方法是使用Spring及其JDBCTemplate

最好的方法可能取决于你用来创建你的网络应用程序的堆栈。如果你重新开始,那么Spring是一个很好的选择。

+0

而对于可伸缩性,使用从JNDI查找的池数据源。 – gustafc 2010-04-08 17:15:21

0

使用总是连接池数据源如c3p0是非常重要的。

0

有一个将java对象映射到mysql数据库的项目。 Azirt.

1

对这个简单问题的最佳答案是:“它取决于”。

有许多API可用于数据库访问。几乎所有人都将使用JDBC API作为与数据库通信的手段。所以从理论上讲,没有什么能打败原始的低级JDBC(就像机器代码在理论上总是比高级编程语言一样快)。

但是,正如你也喜欢写可重用的代码,我建议你看看JPA。它是关于对象持久化到关系数据库的Java标准。它的性能非常好,而且非常便携。

由于JPA只是一个规范,您可以选择自己的实现:HibernateOpenJPA或任何兼容的Java EE服务器。