资讯专栏INFORMATION COLUMN

FineReport连接Oracle数据库的问题汇总

kevin / 2411人阅读

摘要:实现步骤若使用数据库,在定义数据连接时,将原来的改成数据库名如在和机器上都拥有数据库名为,那么数据连接的就改成,即可。或者,因网络问题或数据库没有启动导致连接失败。和的区别程序连接数据库时,用驱动要比用驱动性能好些。

一、Oracle连接多个数据库

通常情况,在定义数据连接时只连一个Oracle数据库,但是有时可能因为网络或者其它原因,数据库连接不上或不能工作了,则整个项目就不能运行了。此时有什么方法让项目能正常运行呢?

实现思路:

将两台Oracle数据库中,配置相同的数据库以及数据库登录的用户名和密码,然后通过配置url让这个数据连接能连接两台机器,即使用一个数据连接连多个数据库。

实现步骤:

若使用Oracle数据库,在定义数据连接时,将原来的url改成:jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST=IP1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST =IP2)(PORT =1521))(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = 数据库名)))

如:在168和170机器上都拥有数据库名为orcl10g,那么数据连接的url就改成:jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.100.168)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.100.170)(PORT = 1521))(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER =DEDICATED)(SERVICE_NAME = orcl10g))),即可。

二、Oracle相关报错解决方法

报错ORA-00942

对于报错ORA-00942表或视图不存在或者找不到数据连接:*ull

要先确认数据库里表或字段是否存在,或者是否拼写正确。

当初创建时是以什么用户创建的,现在的连接用户是否有权限查询该表。用建表的用户连接后再查询看看。

报错ORA-00904

对于报错ORA-00904,标识符无效

需要确定数据库里对应字段类型是否匹配。

字段、表达式的别名在where子句和group by子句都是不能使用的。

报错ORA-01008

对于报错ORA-01008: 并非所有变量都已绑定

需要结合看一下具体的存储过程是怎么写的,然后在6.5中调用看看。

解决方案:FineReport 6.1升级后,存储过程写法需要变一下,原写法如:call username.procname(?,"[?para|?]","[?para|?]","[?para|?]")需要改为这样的写法:{callusername.package.procedure("${p1}","${p2}","${p3}",?)}即可。

具体示例如下图所示

调用存储过程

阅读需要支付1元查看
<