我正在尝试编写一个简单的 java 实用程序,使用 JCo 将数据从 SAP 提取到 MySQL 数据库中。我已经了解了 JCo 文档并尝试了中提到的相关示例SAP 帮助门户中提到的相关示例,我能够从 Table 中检索数据并插入 MySQL DB。
我想要的是一种以以下两种方式过滤数据的工具:
- 我只想获取必填字段。
- 我只想在特定字段的值与特定模式匹配时才获取行。
在做了一些研究之后,我没有找到任何方法来指定查询参数,以便它只检索过滤后的数据,它基本上查询表中的所有字段,我想我将不得不过滤掉我不想要的数据在我的 java 客户端层。如果我在这里遗漏了什么,请告诉我。
这是一个代码示例:
public static void readTables() throws JCoException, IOException {
final JCoDestination destination = JCoDestinationManager
.getDestination(DESTINATION_NAME2);
final JCoFunction function = destination.getRepository().getFunction(
"RFC_READ_TABLE");
function.getImportParameterList().setValue("QUERY_TABLE", "DD02L");
function.getImportParameterList().setValue("DELIMITER", ",");
if (function == null) {
throw new RuntimeException("BAPI RFC_READ_TABLE not found in SAP.");
}
try {
function.execute(destination);
} catch (final AbapException e) {
System.out.println(e.toString());
return;
}
final JCoTable codes = function.getTableParameterList().getTable(
"FIELDS");
String header = "SN";
for (int i = 0; i < codes.getNumRows(); i++) {
codes.setRow(i);
header += "," + codes.getString("FIELDNAME");
}
final FileWriter outFile = new FileWriter("out.csv");
outFile.write(header + "\n");
final JCoTable rows = function.getTableParameterList().getTable("DATA");
for (int i = 0; i < rows.getNumRows(); i++) {
rows.setRow(i);
outFile.write(i + "," + rows.getString("WA") + "\n");
outFile.flush();
}
outFile.close();
}
此方法尝试读取 SAP 存储元数据或数据字典的表,并将输出写入 csv 文件。这工作正常,但需要 30-40 秒并返回大约 40 万条记录,共 32 列。我的目的是询问是否有一种方法可以限制我的查询只返回一个特定的字段,而不是读取所有字段并在客户端层中丢弃它们。
谢谢。