connection.createStatement有多贵

时间:2014-10-01 18:32:59

标签: java sql jdbc prepared-statement

我必须编写一个java程序来从3个表中获取数据。出于某些商业原因,我无法加入他们。我必须逐个获取记录,如下所示

Fetch all records from Table1
For every record on table1 do 
     if some business-validation passes
        retrieve corresponding records from Table2
        For every record on table2 do
        if some business-validation passes
            retrieve corresponding records from Table3

我编写的代码如下:

Statement statement1 = dbConnection.createStatement();
ResultSet rs1 =  statement1.executeQuery("QUERY TO RETRIEVE DATA FROM TABLE1");
while(rs1.next()){
   // Do business validation
   Statement statement2 = dbConnection.createStatement();
   ResultSet rs2 =  statement2.executeQuery("QUERY TO RETRIEVE CORRESPONDING DATA FROM TABLE2");
   while(rs2.next()){
       // Do business validation
       Statement statement3 = dbConnection.createStatement();
       ResultSet rs3 =  statement2.executeQuery("QUERY TO RETRIEVE CORRESPONDING DATA FROM TABLE3");
       while(rs3.next()){

       }
       rs3.close();
       statement3.close()
    }
    rs2.close();
    statement2.close()
 }
 rs1.close();
 statement1.close()

每个表可以有数百条记录。 现在我的问题是

  1. 在每个循环中执行createStatement并关闭它是否正确?它会贵吗?

  2. 一个。如果我在开头创建3个语句并仅使用它们来调用executeQuery(),该怎么办?有利吗?

    湾在这种情况下,我需要关闭statement2&内部使用后statement3

  3. 哪种方式首选?有没有更好/更快的方式?

1 个答案:

答案 0 :(得分:3)

您的query2和query3似乎分别接受来自查询1和查询2的结果集的参数。

为什么不为所有这些使用PreparedStatement。有关使用PreparedStatement over Statement

的好处,请参阅此链接

Difference between Statement and PreparedStatement

使用PreparedStatement在循环外声明所有三个语句,然后在循环内使用它们。 @Elliott Frisch关于任何Statement类型的结束是正确的。

始终尽可能避免在循环中使用createStatement。

您还必须考虑存储过程。如果您可以编写一个具有循环逻辑的存储过程,那么这可能是您的最佳方法。但这实际上取决于情况。