是否有一种不使用嵌套while循环的实现此程序的方法?

4 浏览
0 Comments

是否有一种不使用嵌套while循环的实现此程序的方法?

目前我的程序正常工作,但是如何在不使用嵌套while循环(一个while循环内部还有另一个while循环)的情况下实现这个程序?这是一种孩子式的编程方式,我的同事不希望我这样写代码。那么有没有一种不同的实现这个程序的方式或者在上面的代码中实现while循环的正确方式?

这是我的当前代码:

注意:导入过程正在工作,但速度有点慢。我已经尝试使用conceptid列的索引。

0
0 Comments

有时候我们需要从数据库中获取数据,如果使用嵌套循环来实现,可能会导致数据库连接的开销增加。下面的代码是一个例子:

SELECT * FROM snomed_descriptiondata WHERE conceptid in (SELECT  id FROM snomed_conceptdata WHERE active=1) AND active=1 

在这个例子中,我们使用了嵌套查询来获取数据。然而,有人希望将这两个查询分开,而不是使用单个查询或者任何形式的连接操作。此外,这两个表snomed_descriptiondata和snomed_conceptdata中的数据行数都超过1300000行,因此使用嵌套查询的效率可能会很低。

为了解决这个问题,我们可以先从snomed_conceptdata表中获取数据,并将其存储在一个列表中。然后,如果您熟悉多线程编程,可以使用Executor框架,在一个工作线程中从snomed_descriptiondata表中读取数据,并将其插入到另一个表中。

这样,我们就可以避免使用嵌套循环,减少数据库连接的开销,提高程序的效率。

0
0 Comments

有没有一种不使用嵌套while循环的实现这个程序的方法?

问题的出现原因是:根据对代码的理解,你正在从一个表中读取数据并将其添加到另一个表中,但在应用程序中从未使用这些数据。如果是这种情况,最好的解决方法是编写一个数据库存储过程来转换数据,并从应用程序中执行它。

解决方法:

1. 编写一个数据库存储过程,将数据从一个表转换并添加到另一个表中。

2. 在应用程序中调用该数据库存储过程,以执行数据转换操作。

以下是一个可能的解决方案的示例:

-- 创建存储过程
CREATE PROCEDURE TransformData
AS
BEGIN
  -- 从表A中读取数据
  DECLARE @DataA TABLE (Id INT, Name VARCHAR(100))
  INSERT INTO @DataA
  SELECT Id, Name FROM TableA
  -- 将数据转换并添加到表B
  INSERT INTO TableB (Id, Name)
  SELECT Id, UPPER(Name) FROM @DataA
END
-- 在应用程序中调用存储过程
EXEC TransformData

通过编写存储过程并在应用程序中调用它,可以避免使用嵌套while循环,并且可以更高效地处理数据转换操作。

0
0 Comments

文章标题:使用单个查询和连接来实现程序的不同方法

在这个问题中,我们需要将程序的执行效率最大化。由于INSERT语句中使用的所有数据都来自于"SELECT"语句,所以在Java应用程序和数据库之间进行多余的往返是没有意义的。将所有操作放在一个SQL语句中将会给您带来最佳性能。

SQL语句应该像这样:

INSERT INTO snomedinfo_data (refid, id, effectivetime, active, moduleid, conceptid, languagecode, typeid, term, caseSignificanceid)
SELECT d.refid, d.id, d.effectivetime, d.active, d.moduleid, d.conceptid, d.languagecode, d.typeid, d.term, d.caseSignificanceid
FROM snomed_descriptiondata d
JOIN snomed_conceptdata c ON c.id = d.conceptid AND c.active = 1 AND d.active = 1

而您的Java代码可以简化为:

try {
    oRoot = Root.createDbConnection(null);
    String sql = "INSERT INTO snomedinfo_data...";
    oPrStmt = oRoot.con.prepareStatement(sql);
    oPrStmt.executeUpdate();
}

显然,以上方法是最优的解决方案。然而,有人提出了不希望使用单个查询或连接的要求,并表示两个表snomed_descriptiondata和snomed_conceptdata中有超过1300000行数据,因此这种方法会非常慢。

然而,我认为这个要求是没有意义的。单个查询语句不仅能够提供更高的性能,而且在处理如此多的行数据时,没有任何比数据库更快的方法。因此,没有使用单个查询或连接的方法是不可行的。

根据我目前的观察,没有办法避免使用嵌套的while循环而不使用单个查询或连接。

0