最近遇到两个BUG
第一: 我要用jdbc连接客户的oracle数据库客户版本为11g 由于我的测试错误我觉得使用的class12这个包版本有点老,好像查不出oracle11g的数据(经证实是我错了) 所以我换了oracle11g的ojdbc6_g驱动包。
换包之后连接报错 ora12505 ,plsql工具可以连接数据库但是jdbc不行,于是乎我就上百度找寻答案,查询了很多网上的帖子才发现问题,9i等老版本的驱动包连接数据库使用的是servicename 也就是我们在tnsnames.ora里配置的服务名。而11g版本的驱动包要求连接数据库要使用sid,爆出的ora12505也就是因为使用的sid不正确导致的。 有很多人的答案是使用sql语句查看数据库中的sid 察看数据库中当前的sid:
SQL> select INSTANCE_NAME from v$instance;
INSTANCE_NAME ---------------- has
这种方法显然很正确,不过我使用的数据库用户没有查看此视图的权限,没办法只能接着找。
最后在一位高手的贴子里找到了答案,这位高手给我们讲解了servicename和sid的区别,并且根据他丰富的经验提出,一般数据库rac集群 有多个子节点,子节点的sid是servicename+数字,而我使用的oracle rac集群的服务名就是rac 将sid改为rac1访问第一个子节点,连接成功。
第二个: 由于我在项目中使用了smb方式来读取服务器的文件,也就是获取windows局域网共享的文件。在这种方法中使用的访问路径格式为:smb://username:password@172.24.14.10/word_files。
由于我使用的密码中含有@字符 导致访问失败,于是乎我又上网找寻答案,结果发现这方面的资料较少,有几位网友写过smb的教程 也提出用户名和密码中不能含有强字符,否则会出错,但是没有提出解决方案。 无奈之下只能搜索包名jcifs,进如官方网站查找api 找到答案 @要用%40表示。 希望此帖子能够帮助到一些人。