应用环境 :
应用服务器linux,中间件:tomcat 6,jdk版本:1.6.0_43,jdbc驱动:ojdbc6,数据库oracle12c pdb。
问题描述:
环境搭建完成之后, 连接使用的连接串格式为:jdbc:oracle:thin:@127.0.0.1:1521/pdborcl
在应用连接数据库的时候一直报错:
java.sql.SQLException: Io 异常: Invalid connection string format, a valid format is: "host:port:sid" 。
解决过程:
1、首先在应用当中做了很多的尝试,无法得到解决,网上查询资料,说是低版本的ojdbc驱动就会出现这样的问题,但是使用的驱动是没有问题的,版本都是匹配的。
2、之后改变连接串格式为:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.9.20.41)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MANAGER))),但是这种方式还是报错了,查询资料之后需要在oracle的安装目录的/NETWORK/ADMIN/sqlnet.ora中添加版本支持的参数,添加完成参数之后本地连接本地库成功。但是服务器是oracle一体机,做了集群,只能操作数据库,不能访问系统,无法做这样的尝试,并且跟oracle一体机的管理人员沟通表示,我们的连接串(jdbc:oracle:thin:@127.0.0.1:1521/pdborcl)是没有问题的,而且必须是这样,所以还是得解决在原先连接串下的问题。
3、本机使用java-jdbc的小例子,用ojdbc6驱动连接数据库没有任何问题,可以查出数据,那么驱动包是没有问题的。
4、后来请教部门技术专家分析认为是jar包加载的问题,按照工程启动时jar包的加载顺序:jdk-tomcat-project,提供的解决办法,将ojdbc6在jdk相关jar包目录、tomcat 相关jar包目录中都拷贝了ojdbc6驱动,启动正常,问题解决。
5、之后我试了一下,只有将ojdbc6包拷贝到jdk的jre的lib(jdk1.6.0_43\jre\lib)下才好用,但是在jdk中未发现其他类似jdbc包的痕迹,暂不清楚是那个文件引起的这个错误。
解决方法:
将ojdbc6包copy到jdk1.6.0_43\jre\lib或相关加载路径下优先去加载驱动包,问题解决。