• java连数据库和数据库连接池踩坑日记(一)-------oracle连接的一些问题


        最近接触oracle有点多,同时也在配置数据库连接池,坑也就踩多了,记录下。

      事情还没有结束,没时间记录问题,很多事情都忘了,过了国庆再写的话可能就真的全忘了吧……而且不单单是数据库问题,还有一些数据库连接池等等的问题。

      先写有关数据库的吧。

    一、Navicat连接远端oracle需要配置合适的驱动

      我用Navicat的时候还用的是plsql,连plsql并没有踩什么坑(或者是我自己忘了),所以连接oracle的时候并没有做特殊的配置,然后每次一连接就闪退,我只当是自己填错账号密码没有深究。然后后面查了查教程,需要配置oci。

      先确认你想要连接的oracle的版本,再下载版本对应的驱动

      然后进入Navicat中,选择工具-选项-环境,然后设置oci环境如下,选择自己下载的驱动下面的oci.dll,然后重启Navicat就可以生效了

      

      同时,如果没有配置好oci环境也会报“navicat is not able to create OCI handles”的错误。

    二、java.sql.SQLException: 未调用 ResultSet.next

      这种情况,即使你使用java程序查询oracle程序时返回的只有一条数据,也必须使用result.next(),譬如:

    if(result.next()){
       int count = result.getInt(1);    
    }

    三、查询某个表格是否存在

      我需要使用的是java确定远端oracle中是否有我需要的那张表格存在,有就继续后续的查询操作。根据https://blog.csdn.net/lmb55/article/details/54837719所给的方案得到了解决。

      主要有两个思考方向,一是s可用的sql语句。我在网上查到了很多说法,知道数据库中是有一张表格保存了数据库中所有表的信息,比如表名、拥有者等信息的,但是他们所给的表在我所连接的数据库中都是空表,可能不同的数据库设置问题导致表格也不同,而且也需要确定你的账号有没有访问这张表格的权限。

      我最终找到了结果(注意表名和拥有者作为查询的字符串条件时是区分大小写的,我一开始就因为这个原因屡次出问题):

      

    select * from all_tables WHERE upper(OWNER) LIKE '表的拥有者的大写' AND upper(TABLE_NAME) LIKE '表名的大写'

       第二个方法是别人提供的java方法,但是我这里返回结果是不对的,一直是不存在:

    ResultSet rs = con.getMetaData().getTables(null, null, tableName, null);
    if (rs.next()) {
         return true;
    }else {
         return false;
    }
    当你深入了解,你就会发现世界如此广袤,而你对世界的了解则是如此浅薄,请永远保持谦卑的态度。
  • 相关阅读:
    转发与重定向的区别
    Servlet开发详讲
    Servlet的常见错误
    HTTP请求方式之POST和GET的区别
    Spring各种类型数据的注入
    Spring容器的基本使用
    Python接口自动化-测试用例编写
    Python接口自动化-设计测试用例
    python简明教程之数据结构(列表、元组、字典、集合)
    python简明教程之函数
  • 原文地址:https://www.cnblogs.com/liwxmyself/p/11591914.html
Copyright © 2020-2023  润新知