0

让我们看看这段 Java 代码:

// Code to connect DB
try {
       while (rs!=null){

        String sql="SELECT c1 FROM tbl WHERE c1 like ?";

        preparedStmt = con.prepareStatement(sql);
        preparedStmt.setString(1, "%test%");

        ResultSet rs = preparedStmt.executeQuery();

        if (rs.next()) {
            String c1 = rs.getString(1);
            System.out.println(c1);
        }
    }
} catch (SQLException ex) {
        while (ex != null) {
            System.out.println ("SQL Exception:  " + ex.getMessage ());
            ex = ex.getNextException ();
        }
} catch (java.lang.Exception e) {
        System.out.println("***ERROR-->" + e.toString());   
}

注意:循环可以有 4 个或 5 个循环

第二种解决方案是使用DB存储过程,但是我不知道怎么写&我不想记住所有的存储过程(即如果我使用新的DB,我必须重新导入存储过程)当我部署时我的应用程序。

但我不确定我的应用程序的性能是否受到影响,因为我通过这样的循环向数据库发送了许多查询。

如果您在这种情况下有任何经验,请与我分享。

4

2 回答 2

2

存储过程用于处理非常复杂且无法通过一次查询完成的事情。您无需执行多个查询并使用例如 Java 来获得最终结果,而是创建一个存储过程以允许您执行 DB 端的处理,并且只将结果返回给 Java 客户端。

这样做的好处是:

  • 减少来回网络开销
  • 执行多个 SQL 查询

以及以下缺点:

  • 必须编写一个完全新的存储过程
  • 更多的处理发生在服务器端(尽管这是有争议的,因为多个查询也会消耗资源)。

对于这么简单的查询,它是一个 SQL 查询,所以没有任何存储过程是有意义的。

于 2013-04-16T18:12:44.530 回答
1

我认为外循环也受到某些数据库查询的影响。在这种情况下,您不需要存储过程,您可以简单地编写一个结合外部和内部 SQL 语句的 SQL 语句,很可能通过一些表连接。由于未发布外部查询,因此我只能猜测。

一般来说,在所有其他条件相同的情况下,拥有一个“大”SQL 语句和一个足够索引的数据库会更快,因为:

  • 网络延迟减少到一个查询
  • 数据库可以导出一个cleaver执行计划,从而更早的减少数据量
  • 通过网络传输的数据更少

但是,如果查询的计算很复杂并且您的数据库是瓶颈,那么将这些繁重的任务转移到多个应用程序服务器可能是明智之举。

于 2013-04-16T18:16:30.700 回答