String sql = "SELECT " + k_data + " FROM " + tab + " WHERE " + k_id
+ "='" + this.id + "' FOR UPDATE";
ResultSet rs = stmt.executeQuery(sql); Blob b = rs.getBlob(k_data);
System.out.println(b.getClass());
oracle.sql.BLOB blob = (oracle.sql.BLOB) b;代码如上,oracle.sql.BLOB blob = (oracle.sql.BLOB) b;这里报classCastException。
System.out.println(b.getClass());的输出是oracle.sql.BLOB
网上查了很久,都说是驱动包重复的问题。
已经试了很多次,把工程里面关于oracle的包都删掉,外部引用tomcat里面的orcl14,错误依旧。
tomcat里面的orcl14不能删,配置连接池的时候要用到。
orcl5, orcl6, oracle等包一个个轮换着放进工程里面,还是错。
各位就买啊

解决方案 »

  1.   

    wb下要用自己专用的包,容易出现问题。
    tomcat用默认的包即可。
    LZ确认一下是否得到数据,把语句写的严密些。try {
    .....
    if (rs.next())
    {
      oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(k_data);   
    }} catch(Exception e) {
    .....
    }
      

  2.   

    有确认的,只是贴上来的时候省略了。
    贴个完整点的。
    public void insert() throws SQLException, IOException {
    // Connection conn = (Connection) new DBConnector().getConnection(); Connection conn = (Connection) this.getConnection();
    boolean defaultCommit = conn.getAutoCommit();
    conn.setAutoCommit(false);
    Statement stmt = conn.createStatement(); String sqlp = "INSERT INTO " + tab + "(" + k_id + "," + k_detl + ","
    + k_data + ")" + " VALUES ('" + this.id + "','" + this.detail
    + "',EMPTY_BLOB() )";
    System.out.println(sqlp);
    stmt.executeUpdate(sqlp); String sql = "SELECT " + k_data + " FROM " + tab + " WHERE " + k_id
    + "='" + this.id + "' FOR UPDATE";
    ResultSet rs = stmt.executeQuery(sql); while (rs.next()) {
    //System.out.println("rrrrrrrr");
    Blob b = rs.getBlob(k_data);
    System.out.println(b.getClass());
    oracle.sql.BLOB blob = (oracle.sql.BLOB) b;
    BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
    for (int i = 0; i < this.files.size(); i++) {
    BufferedInputStream in = new BufferedInputStream(new FileInputStream((File) files.get(i)));

    int c;
    while ((c = in.read()) != -1) {
    out.write(c);
    }
    in.close();

    }
    out.close();
    }
    conn.commit();
    conn.setAutoCommit(defaultCommit);
    }这段代码之前是没事的,放了一段时间,重装了几次系统和tomcat之后,再架起来就用不了
    确实是get出来了。get出来的对象输出getClass也是oracle.sql.BLOB没错。楼上的仁兄能详细一点说明包的问题么?
      

  3.   

                            String data="";
    java.sql.Clob clob1 = rs.getClob(14);
            Reader inStream = clob1.getCharacterStream();
            char[] c = new char[(int) clob1.length()];
            inStream.read(c);
            //data是读出并需要返回的数据,类型是String
            data = new String(c);
    reply.setRevert_Content( data);楼主可否有用。