循环完成前执行批处理的Java流
在下面的代码中,我试图插入批处理数据,但executeBatch在流结束前工作。而且它持续工作。流结束后,如何使ExecuteBack工作循环完成前执行批处理的Java流,java,java-stream,Java,Java Stream,在下面的代码中,我试图插入批处理数据,但executeBatch在流结束前工作。而且它持续工作。流结束后,如何使ExecuteBack工作 try (Connection dbConn = hConn.getHikariMap().get("" + connectionId).getConnection();) { Statement statement = dbConn.createStatement(); if (fileData.get(
try (Connection dbConn = hConn.getHikariMap().get("" + connectionId).getConnection();) {
Statement statement = dbConn.createStatement();
if (fileData.get(0).length == 1) {
fileData.stream().forEach(row -> {
columnValTemp.append("','" + row[fileColumnOrder.get(0)] + "','" + row[fileColumnOrder.get(0)]);
valuesTemp.append(columnValTemp);
columnValTemp.setLength(0);
values.append(valuesTemp);
String query = "INSERT INTO " + schema + "." + tableName + " (" + columns + ") VALUES " + " ('" + values+ "')";
try {
statement.addBatch(query);
} catch (SQLException e) {
e.printStackTrace();
}
values.delete(values.length() - valuesTemp.length(), values.length());
valuesTemp.setLength(0);
});
statement.executeBatch();
}
} catch (SQLException e) {
logger.error(e, e);
e.printStackTrace();
}
您如何知道它在流结束之前执行?它每秒插入查询。我还调试了它。我希望stream能够完成,然后立即插入所有bacth查询。如果您认为这是导致
stream()
的原因,但我不这样认为,您可以使用forEach
进行收集-这里不需要stream()
。我也认为不应该,但它可以用于for循环,但不能用于stream和forEach。即使我在流之后立即打印某些内容,它也会在流处理结束之前工作。