关于birt使用library时报org.eclipse.birt.report.data.oda.jdbc.JDBCException: Missing properties in Connection.open(Properties).的问题

本文介绍了一种在BIRT报表中出现的“org.eclipse.birt.report.data.oda.jdbc.JDBCException:MissingpropertiesinConnection.open(Properties)”异常现象及其解决办法。通过调整库文件路径配置,确保在预览和部署到Tomcat环境中都能正确加载资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近在学习birt报表,在使用library公用数据源浏览报表时,出现了“org.eclipse.birt.report.data.oda.jdbc.JDBCException: Missing properties in Connection.open(Properties).”的异常信息,具体表现为预览和运行报表都能正常显示,但是在tomcat里运行时则报错,从网上找了一些相关资料,现记录一下解决办法:

      先说说报错的原因是由于找不到库所在的文件导致的,因此解决办法是将库所在目录进行修改。

      首先查看工程的web.xml文件中“BIRT_RESOURCE_PATH”属性的设置,此属性设置的是“用户资源存放路径,这些资源包括 library 文件,image 文件等。默认是当前根目录。”比如我的设置为“/library”,则表示是所有的库文件都是在跟木下的library目录下。

      查看报错报表文件的xml源代码,发现引入的库路径为“library/ds.rptlibrary”,这是在将库文件拖放到报表文件时自动添加的,此时完成报表后在预览和运行时可以正常看到结果,但是在tomcat下会执行出错,即标题提示的错误。

      解决办法:

      a.删除报表文件的ds.rptlibrary引用;

      b.点击eclipse上方的菜单栏“窗口”→“首选项”,左侧找到“报表设计”→“资源”,点击“选择”找到当前工程下的library目录,然后确定退出。

      c.重新将ds.rptlibrary引入到报表文件中。

      d.预览、运行报表均正常,在tomcat下执行也正常。

 

      个人理解首选项中设置的资源属性是相对工程的library配置,当拖放library到报表文件时,birt会读取此配置并添加相对路径(默认为当前工程路径,因此当此配置为空时添加的是library/ds.rptlibrary),此时预览报表正常。当启动tomcat后,web.xml中的配置则会将此配置定义为library目录下,然后再根据默认的配置library/ds.rptlibrary查找,此时查找库的路径相对于工程下的“/library/library/ds.rptlibrary”文件,此时当然找不到库文件了。修改后则保证了在预览和在tomcat下运行报表时查找的路径均为工程下的library目录,从而保证了报表正常解析。

org.eclipse.birt.report.data.oda.jdbc.JDBCException: 获取连接时出错,用户 'sa' 登录失败。 ClientConnectionId:29fcb7de-e9dc-4abd-a52f-7dd610aaa5ac。 at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.doConnect(JDBCDriverManager.java:339) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.getConnection(JDBCDriverManager.java:210) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.tryCreateConnection(JDBCDriverManager.java:827) at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.testConnection(JDBCDriverManager.java:748) at org.eclipse.birt.report.data.oda.jdbc.ui.util.DriverLoader.testConnection(DriverLoader.java:147) at org.eclipse.birt.report.data.oda.jdbc.ui.util.DriverLoader.testConnection(DriverLoader.java:175) at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper.testConnection(JDBCSelectionPageHelper.java:998) at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper.access$11(JDBCSelectionPageHelper.java:960) at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper$8.widgetSelected(JDBCSelectionPageHelper.java:883) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) at org.eclipse.jface.window.Window.runEventLoop(Window.java:827) at org.eclipse.jface.window.Window.open(Window.java:803) at org.eclipse.birt.report.designer.ui.dialogs.BaseDialog.open(BaseDialog.java:117) at org.eclipse.birt.report.designer.data.ui.providers.EditableDataSourceNodeProvider.performEdit(EditableDataSourceNodeProvider.java:73) at org.eclipse.birt.report.designer.internal.ui.views.DefaultNodeProvider.performRequest(DefaultNodeProvider.java:472) at org.eclipse.birt.report.designer.internal.ui.views.actions.EditAction.doAction(EditAction.java:85) at org.eclipse.birt.report.designer.internal.ui.views.actions.AbstractElementAction.run(AbstractElementAction.java:70) at org.eclipse.birt.report.designer.internal.ui.views.RenameListener.doubleClick(RenameListener.java:214) at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:832) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:829) at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1470) at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1263) at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:252) at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:249) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:311) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) at org.eclipse.equinox.launcher.Main.run(Main.java:1515) at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
最新发布
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值