我正在尝试编写一个简单的java实用程序,它使用JCo将数据从SAP提取到MySQL数据库中。我已经理解了JCo文档并尝试了SAP help portal中提到的相关示例,我能够从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秒,并返回大约4万条记录,32列。我的目的是询问是否有一种方法可以限制我的查询仅返回特定字段,而不是读取所有字段并在客户端层中丢弃它们。
感谢。
答案 0 :(得分:0)
这很好用:
JCoTable table = function.getTableParameterList().getTable("FIELDS");
table.appendRow();
table.setValue("FIELDNAME", "TABNAME");
table.appendRow();
table.setValue("FIELDNAME", "TABCLASS");
请检查此Thread
感谢。