使用条件检查多行值的循环
A loop to check a value multiple rows with conditions
Database Image
我正在努力解决这个问题。
我的工作:
我想打印 table 中的所有 3 行(将附上示例),并在 EID 列中显示值。
- 我想测试 EID1 的值(第一行)是否以 8 开头。(完成)
- 我想测试CID1(第一行)的值是否以“M”开头。 (完成)
- 现在我想循环整个 table 并检查每一行的以下条件,例如:(完成)
- 如果 EID1 =< 8 且 CID1 以 M 开头,则打印通过,否则,打印失败。
- 如果 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));
每个键值采用 EID1
、EID2
等形式。
在你的第二个循环中你做了:
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");
}
}
与您在第一个循环中所做的完全一样。
Database Image 我正在努力解决这个问题。 我的工作: 我想打印 table 中的所有 3 行(将附上示例),并在 EID 列中显示值。
- 我想测试 EID1 的值(第一行)是否以 8 开头。(完成)
- 我想测试CID1(第一行)的值是否以“M”开头。 (完成)
- 现在我想循环整个 table 并检查每一行的以下条件,例如:(完成)
- 如果 EID1 =< 8 且 CID1 以 M 开头,则打印通过,否则,打印失败。
- 如果 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));
每个键值采用 EID1
、EID2
等形式。
在你的第二个循环中你做了:
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");
}
}
与您在第一个循环中所做的完全一样。