你还是到JAVA取问一下吧!!!
或者在论坛里搜索一下。

解决方案 »

  1.   

    http://www.csdn.net/Expert/TopicView1.asp?id=945944
    咱俩同病相怜。
      

  2.   


    通过JDBC访问oracle数据库的CLOB类型 
    1. 关于CLOB(Character Large Object)
    CLOB可用于存放大文本数据,最多可存储4GB数据,在应用开发中比较常见.java提供的sql.Clob类与之对应.它提供两个方法来读取Clob的数据: 
    getCharacterStream() 方法返回按unicode编码的输入流(java.io.Reader对象)
    getAsciiStream() 方法返回按ASCII编码的输入流(java.io.InputStream对象)
    所以如果你的数据库中有可能存储中文字符的话,就要使用前一个方法.
    现在举一个实际的例子,让我一步步学习如何使用CLOB.
    首先,创建一个含CLOB字段的表:
    create table test (id INTEGER, content clob);接下来, 我们通过JSP往这张表里插入一条记录,然后再获取显示它.
    插入操作: 
    <%
        Connection con = DriverManager.getConnection(...); //该行从略
        String content = request.getParameter("content");  //大文本数据
        con.setAutoCommit(false);    //*
        String sql = "insert into test values(1, empty_clob())";
        Statement stmt = con.createStatement();
               stmt.executeUpdate(sql);
        
        con.commit();            //*
        sql = "select content from test where id=1 for update";
        ResultSet rs = stmt.executeQuery(sql);
        if (rs.next()) {
            oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
            clob.putString(1, content);
            sql = "update test set content=? where id=" + seq;
            PreparedStatement pstmt   = con.prepareStatement(sql);
            pstmt.setClob(1, clob);
            pstmt.executeUpdate();
        }
    %>以上需要注意的几点是:
    1)clob类型的数据不能直接insert,要先通过empty_clob()方法给它分配一个locator(同理,blob的用empty_blob()函数分配locator).然后把它select出来(此时它当然没有数据,但结果集不是空的),得到一个Clob的对象,修改该对象的内容让它满足我们的需要,再通过update方法更新该行记录.2) 通过select修改含lob类型的记录时一定要锁定该行(通过for update关键字实现),否则oracle会报错.3) 刚插入的记录就select for update, 会出现"违反读取顺序"错误,解决办法是将自动提交功能置为false,即不允许自动提交,然后commit它,再select,就可以了. 这就是上面那段代码里//*两行的作用.下面,我们将刚插入的记录从数据库中读取出来并显示之:
    <%    
        String sql = "select content from test where doc_id=1";
        ResultSet rs = stmt.executeQuery(sql);
        String content = "";
        if (rs.next()) {
            oracle.sql.CLOB clob = (oracle.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();
                }
                   }
               out.println(content);
    %>
      

  3.   


    通过JDBC访问oracle数据库的CLOB类型 
    1. 关于CLOB(Character Large Object)
    CLOB可用于存放大文本数据,最多可存储4GB数据,在应用开发中比较常见.java提供的sql.Clob类与之对应.它提供两个方法来读取Clob的数据: 
    getCharacterStream() 方法返回按unicode编码的输入流(java.io.Reader对象)
    getAsciiStream() 方法返回按ASCII编码的输入流(java.io.InputStream对象)
    所以如果你的数据库中有可能存储中文字符的话,就要使用前一个方法.
    现在举一个实际的例子,让我一步步学习如何使用CLOB.
    首先,创建一个含CLOB字段的表:
    create table test (id INTEGER, content clob);接下来, 我们通过JSP往这张表里插入一条记录,然后再获取显示它.
    插入操作: 
    <%
        Connection con = DriverManager.getConnection(...); //该行从略
        String content = request.getParameter("content");  //大文本数据
        con.setAutoCommit(false);    //*
        String sql = "insert into test values(1, empty_clob())";
        Statement stmt = con.createStatement();
               stmt.executeUpdate(sql);
        
        con.commit();            //*
        sql = "select content from test where id=1 for update";
        ResultSet rs = stmt.executeQuery(sql);
        if (rs.next()) {
            oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
            clob.putString(1, content);
            sql = "update test set content=? where id=" + seq;
            PreparedStatement pstmt   = con.prepareStatement(sql);
            pstmt.setClob(1, clob);
            pstmt.executeUpdate();
        }
    %>以上需要注意的几点是:
    1)clob类型的数据不能直接insert,要先通过empty_clob()方法给它分配一个locator(同理,blob的用empty_blob()函数分配locator).然后把它select出来(此时它当然没有数据,但结果集不是空的),得到一个Clob的对象,修改该对象的内容让它满足我们的需要,再通过update方法更新该行记录.2) 通过select修改含lob类型的记录时一定要锁定该行(通过for update关键字实现),否则oracle会报错.3) 刚插入的记录就select for update, 会出现"违反读取顺序"错误,解决办法是将自动提交功能置为false,即不允许自动提交,然后commit它,再select,就可以了. 这就是上面那段代码里//*两行的作用.下面,我们将刚插入的记录从数据库中读取出来并显示之:
    <%    
        String sql = "select content from test where doc_id=1";
        ResultSet rs = stmt.executeQuery(sql);
        String content = "";
        if (rs.next()) {
            oracle.sql.CLOB clob = (oracle.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();
                }
                   }
               out.println(content);
    %>
      

  4.   

    sm8848的这个程序有点小小的问题,也就是在写入的这段程序中,因为已经设定了setAutocommit(false),所以,使用pstmt.executeUpdate(),没有con.commit()的话,下次从数据库取出来的就是空值。为了这个浪费了我两天的时间,人笨呢,:)