把(oracle.jdbc.driver.OracleResultSet)rs
换成rs另外,有时候修改了某些类时需要重启WL,否则也会有ClassCastException

解决方案 »

  1.   

    oracle.sql.CLOB clob =(oracle.sql.CLOB) ((oracle.jdbc.driver.OracleResultSet)rs).getClob("CLOBCOL");
      

  2.   

    oracle.sql.CLOB clob = ((oracle.jdbc.driver.OracleResultSet)rs).getClob("CLOBCOL");
    中的((oracle.jdbc.driver.OracleResultSet)是什么意思啊。
    你这里是把oracle.jdbc.driver.OracleResultSet这个类型转化成oracle.sql.CLOB这个类型,这样行不?
    oracle.sql.CLOB clob =(oracle.sql.CLOB) ((oracle.jdbc.driver.OracleResultSet)rs).getClob("CLOBCOL");
    试试!
      

  3.   

    楼上的兄弟方法我试了,不行阿,还有没有其他的高见,是我的服务器配置的问题吗,还是我的写法的问题呢,我试了一下,执行了SELECT CLOBCOL FROM bulletin WHERE ID='111' FOR UPDATE后里面的结果集rs是空的,当我while(rs.next()){System.out.println(“yes”)}是打印不出来的。
      

  4.   

    stmt.executeUpdate("INSERT INTO bulletin(id,clobcol) VALUES ('111', EMPTY_CLOB())");
    ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM bulletin WHERE ID='111' FOR UPDATE");
    while (rs.next()) {
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
    BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
    BufferedReader in = new BufferedReader(new FileReader(infile));
    int c;
    while ((c=in.read())!=-1) {
    out.write(c);
    }
    in.close();
    out.close();
    }
      

  5.   

    oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBCOL");
    这样才对
    真是得,别忘了给分
      

  6.   

    java.lang.ClassCastException
    类型转换异常。你就在类型上找原因吧,跟别的无关
    你怎么就能把ResultSet类型转换为oracle.jdbc.driver.OracleResultSet类型????
      

  7.   

    oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBCOL");
    这么写也不对,还是到这句话出错
      

  8.   

    你用的是weblogic配置的数据库连接池,还是直接jdbc连接,还是其它应用服务器的数据源?如果不是直接jdbc,可以有些改变,如,weblogic下的数据源必需是:
    Clob c = resultset.getClob(1);
    weblogic.jdbc.common.OracleClob clob =  (weblogic.jdbc.common.OracleClob) c;
    //对clob直接操作。
      

  9.   

    还是不行!我都快晕死了,我用的webligic8,
    DriverName="oracle.jdbc.driver.OracleDriver"
    驱动是jdbc:oracle:thin:@localhost:1521:SZK
    还有其他的方法吗?
      

  10.   

    java.sql.Clob clob = rs.getClob("ClobCol");没有必要强制转换成Oracle的Clob呀.
      

  11.   

    java.sql.Clob里面是没有写入大字段的方法的
      

  12.   

    把你的代码给我。email:[email protected]
      

  13.   

    呵呵,不错
    我也要
    [email protected]
      

  14.   

    还是这里的转换有问题。
    oracle.sql.CLOB clob = ((oracle.jdbc.driver.OracleResultSet)rs).getClob("CLOBCOL");
      

  15.   

    以下代码肯定能够正确运行。
    try {
                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                Connection conn =
                    DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.193:1521:oradb", "system", "manager");
                PreparedStatement ps = conn.prepareStatement("select NR from XX where ID=5");//where ID=487
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob(1);
                    System.out.println(clob);
                    System.out.println(rs.getString(2));
                }
                rs.close();
                ps.close();
                conn.close();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
      

  16.   

    查看clob的长度,检查是否已经插入成功 
    select dbms_lob.getlength(content) from article;第一种方法;数据库连接方式是直接连接则可以用以下方式
    conn.setAutoCommit(false);
    String Sql="insert into article (aclassid,anclassid,title,content,iner,writer,keyword,writefrom,px,virusid,softid) values("+us.getAclassid()+","+us.getAnclassid()+",'"+us.getTitle()+"',empty_clob(),'"+us.getAuthor()+"','"+us.getWriter()+"','"+us.getRelatitle()+"','"+us.getComefrom()+"',"+us.getOrder()+",'"+us.getVirusId()+"','"+us.getSoftId()+"')";
    System.out.println(Sql);
    stmt = conn.createStatement();
    stmt.executeUpdate(Sql);
    conn.commit();
    //stmt = conn.prepareStatement(sql);//查询刚刚插入的空的content值的最大编码
    String SqlMax="select unid from article order by unid desc";
    rs=stmt.executeQuery(SqlMax);
    int unid_count=1;
    if (rs.next()){
    unid_count = rs.getInt("unid");
    }
    System.out.print(unid_count);
    //更新内容为最新值
    System.out.print(us.getContent());
    String SqlUpdate="select content from article where unid="+unid_count+" for update";
    ResultSet rs_update = stmt.executeQuery(SqlUpdate);
    if (rs_update.next()) {
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs_update.getClob(1);
    clob.putString(1, us.getContent());
    String sql = "update article set content=? where unid="+unid_count+"" ;
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setClob(1, clob);
    pstmt.executeUpdate();
    }
    conn.commit();
    ifAdd = true;
    ============================================================
    更新操作
    conn.setAutoCommit(false);
    stmt = conn.createStatement();
    //晴空原来clob对象为空
    stmt.executeUpdate("UPDATE article SET content=empty_clob() WHERE unid='"+us.getUnid()+"'");
    //更新内容为最新值
    //所顶所在行
    String SqlUpdate="select content from article where unid='"+us.getUnid()+"' for update";
    ResultSet rs_update = stmt.executeQuery(SqlUpdate);
    if (rs_update.next()) {
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs_update.getClob(1);
    clob.putString(1, us.getContent());
    String sql = "update article set content=?,title=?,aclassid=?,anclassid=?,title_url=?,picture=?,picture_url=?,fujian=?,commend=?,iscomment=?,author=?,isorder=?,relatitle=?,comefrom=?,summary=? where unid='"+us.getUnid()+"'" ;
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setClob(1, clob);
    pstmt.setString(2,us.getTitle());
    pstmt.setInt(3,us.getAclassid());
    pstmt.setInt(4,us.getAnclassid());
    // pstmt.setString(5,us.getTitle_url());
    // pstmt.setString(6,us.getPicture());
    //pstmt.setString(7,us.getPicture_url());
    //pstmt.setString(8,us.getFujian());
    //pstmt.setString(9,us.getCommend());
    //pstmt.setString(10,us.getComment());
    pstmt.setString(11,us.getAuthor());
    pstmt.setInt(12,us.getOrder());
    pstmt.setString(13,us.getRelatitle());
    pstmt.setString(14,us.getComefrom());
    //pstmt.setString(15,us.getSummary());
    pstmt.executeUpdate();
    }
    conn.commit();
    conn.close();
    rs_update.close();
    stmt.close();
    ifAdd = true;
    ===============================================
    读取操作
    stmt = conn.createStatement();
    String sql = "select * from article where unid='"+unid+"'";
    rs = stmt.executeQuery(sql);
    String content = "";
    if (rs.next()) {
    java.sql.Clob clob = (java.sql.Clob)rs.getClob("content");
    if (clob != null){
    Reader is = clob.getCharacterStream();BufferedReader br = new BufferedReader(is);
    String s = br.readLine();
    while (s != null) {
    content += s + "<br>";
    s = br.readLine();
    }
    }
    //String title=;
    us.setTitle(rs.getString("title"));
    us.setContent(content);
    System.out.print(content);
    System.out.println("sdfffffffffffffff");us.setAclassid(Integer.parseInt(rs.getString("aclassid")));
    us.setAnclassid(Integer.parseInt(rs.getString("anclassid")));
    us.setAuthor(rs.getString("iner"));
    us.setComefrom(rs.getString("writefrom"));
    us.setCommend(rs.getString("flag2"));
    us.setOrder(Integer.parseInt(rs.getString("px")));
    us.setRelatitle(rs.getString("keyword"));
    us.setStatus(rs.getString("state"));
    us.setWriter(rs.getString("writer"));
    us.setAddTime(rs.getString("intime"));
    us.setViewhit(rs.getString("viewhit"));
    us.setSoftId(rs.getString("softid"));
    us.getAclassid();//String title_url=rs.getString("title_url");
    }
    ==============================================
    ==========================
    第三种方法:使用tomcat连接池的问题如果使用第一种方法来添加或者更新就会出现java.lang.ClassCastException: oracle.sql.CLOB的类型构造错误,解决方法是不做任何程序改动,把lib下的classes12.jar(oracle包)删除既可以解决,读取文章的程序也不做任何变动
    ====================================
    ===========
    第二种方法:当使用weblogic连接池进行添加和更新时1)导入weblogic的类文件,该文件在weblogic安装目录下就可以找到,weblogic.jar
    2)将以上语句改为(oracle.sql.CLOB clob = (oracle.sql.CLOB)rs_update.getClob(1);
    )--------------
    weblogic.jdbc.vendor.oracle.OracleThinClob clob = (OracleThinClob)rs_update.getClob(1)3)读取文章不做任何改动