Vertx:无法从fillReport读取SQLConnection

时间:2016-04-12 18:03:55

标签: jasper-reports vert.x vertx3

我想使用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);}

问候。

1 个答案:

答案 0 :(得分:0)

答案很简单。您无法将Vert.x io.vertx.ext.sql.SQLConnection强制转换为JDBC java.sql.Connection

Vert.x严重依赖异步调用。 JDBC是阻塞的,所以Vert.x用异步接口包装它(还有一点点)。由于JDBCConnectionImpljava.sql.Connection界面中没有getter或类似内容,因此无法访问真实的SQLConnection

这并不意味着你不能将Jasper与Vert.x一起使用。您需要打开自己的JDBC连接 - 但不要block the Event loop!所以我建议你看看Worker Verticles,它不会阻止事件循环,因为它们会启动一个分离线程。