{
"type" : "jdbc",
"jdbc" :{
"strategy" : "oneshot",
"index" : "exec_jdbc_index",
"type" : "exec_jdbc_type",
"driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"url" : "jdbc:sqlserver://host:1433;databaseName=MyDB",
"user" : "user",
"password" : "password",
"sql": "Exec MyProcName",
"callable" : true,
"fetchsize" : 1000
}
}
我得到以下例外:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: A result set was generated for update.
请建议,如何从JDBC River Plugin调用存储过程。 Simple Select工作正常。
当然,这里是跟踪:[错误] [org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] com.microsoft.sqlserver.jdbc.SQLServerException:生成了一个结果集用于更新。 java.io.IOException:com.microsoft.sqlserver.jdbc.SQLServerException:为更新生成结果集。 at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:231) 在org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.move(SimpleRiverFlow.java:129) 在org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.run(SimpleRiverFlow.java:88) 在java.lang.Thread.run(Thread.java:722) 由以下原因引起:com.microsoft.sqlserver.jdbc.SQLServerException:生成了用于更新的结果集。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171) 在com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:797) 在com.microsoft.sqlserver.jdbc.SQLServerStatement $ StmtExecCmd.doExecute(SQLServerStatement.java:676) 在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) 在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) 在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179) 在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154) 在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:633) at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.executeUpdate(SimpleRiverSource.java:522) 在org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.execute(SimpleRiverSource.java:260) 在org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:227) ......还有3个
答案 0 :(得分:0)
你是否正在返回任何" _id"来自存储过程结果集?我相信_id在索引中是必需的,以保持其唯一性。尝试返回_id作为结果集的一部分。如果它没有帮助,你能不能添加更多的堆栈跟踪部分来了解实际的根本原因。
答案 1 :(得分:0)
好的,终于找到了问题所在。可调用语句未被解析为可调用。
我修改了SimpleRiverSource
java类,方法fetch(),看起来甚至可调用语句都转到execute()
或executeWithParameter(command);
。我做了一个简单的改变来打电话
executeCallable(command);
在那里,它开始工作。