我想使用vertx和JasperReports,我创建我的连接并测试它,一切正常,但是当我想通过使用fillReport方法(其中最后一个是Connection)填充jasper报告时,它显示错误:
JasperFillManager类型中的方法fillReport(JasperReport,Map< String,Object>,Connection)不适用于参数(JasperReport,null,Class< connection>)。
知道如何将我的SQLConnect转换为连接?
这是我的代码:
AsyncSQLClient client = MySQLClient.createShared(vertx, mySQLClientConfig);
client.getConnection(res -> {
if (res.succeeded()) {
SQLConnection connection = res.result();
try{
String report = "C:\\Users\\paths\\Test1.jrxml";
JasperReport Jasp = JasperCompileManager.compileReport(report);
JasperPrint JASP_PRINT = JasperFillManager.fillReport(Jasp, null, connection);
JasperViewer.viewReport(JASP_PRINT);
}
catch(Exception ex){System.out.println(ex);}
问候。
答案 0 :(得分:0)
答案很简单。您无法将Vert.x io.vertx.ext.sql.SQLConnection
强制转换为JDBC java.sql.Connection
。
Vert.x严重依赖异步调用。 JDBC是阻塞的,所以Vert.x用异步接口包装它(还有一点点)。由于JDBCConnectionImpl
或java.sql.Connection
界面中没有getter或类似内容,因此无法访问真实的SQLConnection
。
这并不意味着你不能将Jasper与Vert.x一起使用。您需要打开自己的JDBC连接 - 但不要block the Event loop!所以我建议你看看Worker Verticles,它不会阻止事件循环,因为它们会启动一个分离线程。