从数据库中获取数据的有效方法

时间:2014-01-27 10:21:18

标签: java jdbc

我想知道哪种查询样式更好&高效

我正在使用jdbc从多个表中获取数据(我有超过10个表来获取数据)。所有数据都与密钥相关

为此我正在考虑两种方式

1)我正在使用连接从数据库中获取数据

Query s="select a.*,b.*,c.*......";//fetchin all data using joins in single query

Preparedstatement ps = con.prepareStatement(query);//con is a connection object
ResultSet res = ps.executeQuery();
//fetching data from resultset res
con.close(); 

2)我正在从每个表中获取数据

Query s="select from table a";
Preparedstatement ps = con.prepareStatement(s);
ResultSet res = ps.executeQuery();
//fetching data from resultset res
Query s1="select from table b";
Preparedstatement ps1 = con.prepareStatement(s1);
ResultSet res1 = ps1.executeQuery();
//fetching data from resultset res1
.............
//continue for all remaining tables
con.close();           

我想知道是否还有其他/更好的方法。

编辑:我使用的是非常大量的数据。那么hibernet其他方法呢

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是在一个语句中处理所有SQL内容。正如您提议的版本1)。如果在Java源代码中这对您来说太复杂,您可以在数据库中使用存储的函数(我只知道Oracle / MySQL的可能性)并在那里处理更复杂的语句。在Java中,您只调用存储的函数/过程并在Java中处理结果。这对我来说很好。

另一种可能性是使用像Hibernate或其他任何东西的ORM。但对于小事情来说,这将是一种矫枉过正的行为:)

使用1),可以与存储的函数结合使用但不是必需的,您可以让数据库缓存您的语句并获得最佳性能。如果您在方法2)中加载表后表,并且必须处理数据并存储它。这可能效率不高。

答案 1 :(得分:0)

您的数据是否实际链接?或者它们是不同的概念数据集,例如你在query1中加载产品,并说,尺寸,颜色,城镇int查询2,3和4?如果是后者,那么不同的查询可能是最好的,避免了由于人工JOIN结构引起的问题。

编辑 - 如果表格确实相关,那么只要您使用有效的查询,JOINing听起来就合适了。在您的SELECT中,请确保仅撤回您所需的字段(忽略“额外”字段)以帮助提高性能。