zoukankan      html  css  js  c++  java
  • FinReport连接oracle数据库的问题汇总

    一、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相关报错解决方法

    1. 报错ORA-00942

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

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

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

    2. 报错ORA-00904

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

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

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

    3. 报错ORA-01008

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

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

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

    具体示例如下图所示

    调用存储过程

    正确结果

    改成这种写法后,如果仍然不成功,报ORA-06550的错误。

    原因是:ORACLE里面的存储过程,识别包体名,而不是用户名。直接拖的话,默认是用户名,要自己写包名才行。

    4. 报错ORA—00936

    对于报错ORA—00936:missing expression

    解决方案

    sql里的参数写法问题,and([?pro_status|?])和前面的参数识别冲突,去掉and ([?pro_status|?])即可。

    5. 报错ORA-01401

    对于报错ORA-01401: 插入的值对于列过大

    原因:数据库的字段nvarchar2(2000),只能存储1000的汉字,当插入2000的汉字的时候就会报错。

    解决方案

    把nvarchar2(2000)改成nvarchar2(4000)就可以存下你的2000个汉字了。但是有一点,nvarchar2最大也只能够放到4000宽度了。如果还需要存更多的汉字,字段类型就得用Clob类型了。

    6. 报错ORA-01830

    对于报错ORA-01830: 日期格式图片在转换整个输入字符串之前结束

    原因:在对字符串型数据转化成日期型数据时,字符串的长度大于格式化的长度,如test数据库中的一个数据列notice_date存的数据为:2011/08/12 08:49:23,将其转化为yyyy-mm-dd格式的数据时,如sql语句为:select todate(notice_date,'yyyy-mm-dd') from test就会报错。

    解决方案

    使用substr函数将字符串的位数截取的和转换的日期函数相同,如上面的sql语句就改为:select todate(substr(notice_date,1,10,'yyyy-mm-dd') )from test即可。

    7.could not establish the connection

    对于报错:The Network Adapter could not establish the connection

    解决方案

    数据库里系统日志满了,删除后重新启动OracleOraDb10g_home1TNSListener服务后就ull能连接成功了。

    或者,因网络问题或数据库没有启动导致连接失败。

    8. 报错ORA-00911

    对于报错ORA-00911: 无效字符

    原因:这个错误是由于sql语句有问题。把语句拿到库里执行也没报错,后来发现在库里查询时,查询语句结尾带了一个分号,库里面是支持这个分号的,但到IBATIS里面是不支持这个分号的。

    解决方案:去掉分号。

    三、通过oci方式连接Oracle

    oracle通过JDBC数据连接其实是通过thin的方式连接的,大家都知道oracle除了thin方式可以连接之外,oci方式也可以,下面来介绍怎么通过oci的方式来连接oracle。

    oci和thin的区别

    Java程序连接oracle数据库时,用oci驱动要比用thin驱动性能好些。主要的区别是使用thin驱动时,不需要安装oracle的客户端,而使用oci时则要安装oracle的客户端。

    oci连接方式

    在本地安装好oracle的客户端之后,在客户端配置好本地服务名,这里我们配置好的本地服务名为orcl。

    点击服务器>新建数据连接,新建一个jdbc数据连接,如下图:

    更多FineReport的知识可以查看帮助文档(http://help.finereport.com/)

  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/Jian-Zhang/p/8328112.html
Copyright © 2011-2022 走看看