Java 在几个查询中重用esper中的流

Java 在几个查询中重用esper中的流,java,esper,Java,Esper,我试图使用从数据库中加载一些信息,并将其用于具有不同条件的其他查询中。为此,我使用以下代码: ConfigurationDBRef dbConfig = new ConfigurationDBRef(); dbConfig.setDriverManagerConnection("org.postgresql.Driver", "jdbc:postgresql://localhost:5432/myDatabase",

我试图使用从数据库中加载一些信息,并将其用于具有不同条件的其他查询中。为此,我使用以下代码:

    ConfigurationDBRef dbConfig = new ConfigurationDBRef();
    dbConfig.setDriverManagerConnection("org.postgresql.Driver",
                     "jdbc:postgresql://localhost:5432/myDatabase",
                     "myUser", "myPassword");

    Configuration engineConfig = new Configuration();
    engineConfig.addDatabaseReference("myDatabase", dbConfig);

    // Custom class
    engineConfig.addEventType("UserFromDB", UserDB.class);

    EPServiceProvider esperEngine = EPServiceProviderManager.getDefaultProvider(engineConfig);

    String statement =  "insert into UserFromDB "
                      + "   select * from sql:myDatabase ['SELECT * from data.user']";

    //Install this query in the engine
    EPStatement queryEngineObject = esperEngine.getEPAdministrator().createEPL(statement);

    // 1. At this point I can iterate over queryEngineObject without problems getting the information sent by database

    // This query is only a 'dummy example', the 'final queries' are more complex
    statement = "select * from UserFromDB";
    EPStatement queryEngineObject2 = esperEngine.getEPAdministrator().createEPL(statement);

    // 2. If I try to iterate over queryEngineObject2 I receive no data

如何在其他查询中重用UserFromDB存储的信息?(在上面的示例中,在QueryEngineObject 2中)

您没有流,因为数据库不提供流。数据库查询仅在其被迭代/拉取时提供行。 一个选项是循环每一行并使用“sendEvent”将其发送到引擎:

//在迭代之前创建其他EPL语句
迭代器it=语句。迭代器();
while(it.hasNext()){
epService.getEPRuntime().sendEvent(事件);
}

谢谢您的回答,我在本例中的错误是“忘记”包含侦听器来管理第二条语句的结果。使用另一个for/while循环并直接迭代第二个句子是不可能的。
// create other EPL statements before iterating
Iterator<EventBean> it = statement.iterator();
while(it.hasNext()) {
  epService.getEPRuntime().sendEvent(event);
}