×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

实际上我用的都是缺省的设置

Weblogic的ClassPaht里好象没有专门的JDBC驱动,除了用weblogic.jar(这里可能有),JDK用的是jdk141_03
其实我在设置连接池时,Driver和URL与直接JDBC连接时是一样的
Driver------oracle.jdbc.driver.OracleDriver'
URL--------jdbc:oracle:thin:@192.16 8.1.52:152
这好象看不出使用什么版本的JDBC吧

又有新敌情:
如果我在程序里用Weblogic里的JDBC的包,
import weblogic.jdbc.vendor.oracle.*
可以用连接池对Clob字段进行操作了,但如果直接用JDBC连接,下面的语句出现ClassCastException
OracleThinClob clob = (OracleThinClob)((OracleResultSet)rs).getClob(1);

我以毛主席的名义发誓,我只是改了获得数据库连接的程序,上面这条没改过,而且连接池里的Driver和URL与直接JDBC连接是一样的
但二种方法执行上面的句子,有不同的结果,哭笑不得啊
Report

Replies, comments and Discussions:

  • 工作学习 / IT技术讨论 / 奇怪的JDBC问题
    开发平台,BEA Weblogic workshop 8.1
    对于相同的语句
    oracle.sql.CLOB clob = (oralce.sql.CLOB)rs.getClob("content")
    其中字段content类型是Clob

    问题如下:
    如果我从一个连接池中获得一个数据库连接,
    那上面语句会抛出一个ClassCastException

    但我用下面方法得到数据库连接的话
    Class.forName ("oracle.jdbc.driver.OracleDriver");
    Connection con =DriverManager.getConnection(
    "jdbc:oracle:thin:@192.16 8.1.52:1521:SONIC", "scott", "tiger");

    那上面取Clob语句正确,对取出数据库中Clob值
    这是为什么呢?
    • It depends on your rs type. oralce.sql.CLOB implements java.sql.Clob while oracle.jdbc.driver.OracleResultSet implements java.sql.ResultSet
      so, if your rs type is java.sql.ResultSet, the return type of rs.getClob("content") is Clob not CLOB, cast Exceprion occurs here.

      if your rs type is oracle.jdbc.driver.OracleResultSet, the return type of rs.getClob("content") is CLOB, and you don't need cast it at all.
      • 实际情况好象不太一样
        我用java.sql.ResultSet
        getClob()----返回是java.sql.Clob,因此我用(oracle.sql.CLOB)rs.getClob("content")进行转化;
        我也用过oracle.sql.OracleResultSet
        getClob()---还是返加javq.sql.Clob
        getCLOB()---返回oracle.sql.CLOB
        用过上过二个方法,都是不行

        关键是我用JDBC直接连接数据库时
        oracle.sql.CLOB clob = (oralce.sql.CLOB)rs.getClob("content")
        这句执行正确
        而从连接池取得连接时,这名才报错
        • 1.2.3.
          1 you do not have to use oracle type. java.sql.Clob is recommended.
          2.if you have to use oracel.sql.CLOB, you have to set your WL's pool wrapper, inside the wrapper, you configure it using oracle JDBC instead of WL JDBC. Or you never get the oracle CLOB type. Do not ask me how to configure it, because I did not use it for long.
          3.you need to read the "thinking in Java" about interface and class.
    • 查一查你的WEBLOGIC的CLASSPATH中的JDBC和你直接连数据库的JDBC是否是一个版本, 如果用CONNECTION CACHE, 用的是WEBLOGIC的JDBC.
      • 实际上我用的都是缺省的设置
        Weblogic的ClassPaht里好象没有专门的JDBC驱动,除了用weblogic.jar(这里可能有),JDK用的是jdk141_03
        其实我在设置连接池时,Driver和URL与直接JDBC连接时是一样的
        Driver------oracle.jdbc.driver.OracleDriver'
        URL--------jdbc:oracle:thin:@192.16 8.1.52:152
        这好象看不出使用什么版本的JDBC吧

        又有新敌情:
        如果我在程序里用Weblogic里的JDBC的包,
        import weblogic.jdbc.vendor.oracle.*
        可以用连接池对Clob字段进行操作了,但如果直接用JDBC连接,下面的语句出现ClassCastException
        OracleThinClob clob = (OracleThinClob)((OracleResultSet)rs).getClob(1);

        我以毛主席的名义发誓,我只是改了获得数据库连接的程序,上面这条没改过,而且连接池里的Driver和URL与直接JDBC连接是一样的
        但二种方法执行上面的句子,有不同的结果,哭笑不得啊
        • I am sure the weblogic using the different Oracle JDBC driver, check the weblogic classpath and bootclasspath, overwrite that JDBC driver using your classes12.jar, it will be fine.