使用条件检查多行值的循环

A loop to check a value multiple rows with conditions

Database Image 我正在努力解决这个问题。 我的工作: 我想打印 table 中的所有 3 行(将附上示例),并在 EID 列中显示值。

  1. 我想测试 EID1 的值(第一行)是否以 8 开头。(完成)
  2. 我想测试CID1(第一行)的值是否以“M”开头。 (完成)
  3. 现在我想循环整个 table 并检查每一行的以下条件,例如:(完成)
  4. 如果 EID1 =< 8 且 CID1 以 M 开头,则打印通过,否则,打印失败。
  5. 如果 EID2 =< 8 且 CID2 以 M 开头,则打印通过,否则,打印失败。

我收到以下错误:无法调用“String.startsWith(String)”,因为 java.util.Map.get(object) 的 return 值为 null。

我认为这可能是因为第 (0) 行实际上为空。我可能需要想办法跳过第一次迭代,否则我的逻辑有问题。

    query = "select * FROM PSA.SECOND where T_DATE >'2202-10-10'";
    
    resultSet = statement.executeQuery(Query)
    ResultSetMetaData rsmd = resultSet.getMetaData();
    long pId = 1:
    while (resultSet.next()) {
    for int col = 1; col <= rsmd.getColumnCount(); col ++) {
    result.put(rsmd.getColumnLabel(col)+pId, resultSet.getString(col)); }
    pId ++;
    }
    //print all results in col
    for (int i=0; i<pId;i++)
    System.out.println("EID: "+result.get("EID"+i));

    //problem
    for (int i=0; i<pId;i++)
    if (result.get("EID1").startsWith("8")){
    if result.get("CID1").startsWith("M") {
    System.out.println ("true");
    }
    }

您应该使用您的数据库进行搜索。因此搜索失败条件,如果没有结果,则打印“true”。

下面是一个基于一些数据假设的示例,用于搜索您的 'fail' 条件。

select 1
FROM PSA.SECOND
WHERE T_DATE >'2202-10-10'
    AND CID LIKE 'M%'
    AND EID <= 800
LIMIT 1

优点是在 CID 上建立索引,EID 这可以是一个不涉及整个数据集的搜索,并在第一次失败时停止。

看看这个循环:

for (int i=0; i<pId;i++)
    System.out.println("EID: "+result.get("EID"+i));

每个键值采用 EID1EID2 等形式。

在你的第二个循环中你做了:

for (int i=0; i<pId;i++)
    if (result.get("EID1").startsWith("8")){
        if result.get("CID1").startsWith("M") {
            System.out.println ("true");
        }
    }

您每次都在使用 EID1

您需要将循环更改为:

for (int i=0; i<pId;i++)
    if (result.get("EID" + i).startsWith("8")){
        if result.get("CID" + i).startsWith("M") {
            System.out.println ("true");
        }
    }

与您在第一个循环中所做的完全一样。