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/)

  • 相关阅读:
    2016改变与突破的一年
    web安全测试&渗透测试之sql注入~~
    后台服务端接口验证项目实例~~
    Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)
    web自动化框架之四测试报告的搭建
    web自动化框架之三获取数据库值与界面值比较~~
    Web自动化框架搭建之二基于数据驱动应用简单实例~~
    web自动化框架之一介绍与环境搭建(Selenium+Eclipse+Python)
    事件响应
    威胁分析
  • 原文地址:https://www.cnblogs.com/Jian-Zhang/p/8328112.html
Copyright © 2011-2022 走看看