我现在将读数据的代码改成如下这样:
//这是读从数据库中读取CLOB时的代码
String s,content="";
String sql = "select content from sys_news_info"; 
db.prepareStatement(sql);
rs = db.executeQuery(); 
while (rs.next()) {
oracle.sql.CLOB clob=(oracle.sql.CLOB)rs.getClob("content");
BufferedReader br = new BufferedReader(clob.getCharacterStream());
while((s=br.readLine())!=null){
 content+=s +"\n";
}
br.close();
}
现在在<textarea>显示,第一个字符是null的问题和不能分段的问题已经没有了,但是第一行还是会有一大块空格,现在又出现了新问题,如果我不在<textarea>里显示的话,像普通的显示文字一样在一个网页里显示,还是没有分段,你说这都叫什么事啊?!

解决方案 »

  1.   

    把查询出来的字符串trim()一下试试看
      

  2.   

    我试了,trim()也没有用!!!!!
      

  3.   

    开始你用readLine读出数据处理的时候,在循环处理时没有加换行符,后面改过的是对的。textarea换行是\n,在html里面可不认你这个。html用br,p等来换行或分段,或者试试pre等。
      

  4.   

    在保存和读取数据的时候除了trim()外不要做任何操作,需要显示的时候在做处理:
      public static String convertHtmlCode(String sText) {
        StringBuffer buf = new StringBuffer();
        int nCount = sText.length();
        for (int i = 0; i <= nCount - 1; i++) {
          String sTmp = null;
          if (nCount > 1) {
            sTmp = sText.substring(i, i + 1);
          }
          else {
            sTmp = sText;
          }
          String sResult = sTmp;
          if (sTmp.equals("\n")) {
            sResult = "<BR>";
          }
          if (sTmp.equals(" ")) {
            sResult = "&nbsp;&nbsp;";
          }
          if (sTmp.equals("&nbsp;")) {
            sResult = " ";
          }
          buf.append(sResult);
        }
        return buf.toString();
      }
      

  5.   

    楼上的,我试了你的方法,可是网页上还是把<BR>打印出来了,而不是换行,其它的比如说"&amp;"转换成"&" ,  "&quot;"转换成"\""   ,   "&nbsp;"转换成" "  都没有问题,偏偏"&lt;"不能转换成 "<"  ,  "&gt;"不能转换成">"  我真是服了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  6.   

    天哪天哪天哪天哪天哪!!! 我知道什么 偏偏"&lt;"不能转换成 "<"  ,  "&gt;"不能转换成">" 了
    原来是struts的一个BUG,我用的是struts1.1,新闻内容content字段用的是clob类型,JSP页面采用<bean:write name="sys_news_info" property="content">方法进行显示时,"&lt;"不能转换成 "<"  ,  "&gt;"不能转换成">"  ,而且一般的方法直接在页面上调用同一个bean显示,就没有问题,害得我怎么也找不出原因,谁能想到struts会有这样的BUG啊!!!!!!
      

  7.   

    但是现在的问题是:本来文章的第一行是标题或是空两格,但现在在<textarea>显示时,第一行向后空很多格,而在页面上显示就是顶格,这问题怎么就这么奇怪呢?你说多恶心!!!!!有谁碰到过相同的问题,指点一下啊!!!!!!!!!!!
      

  8.   

    你看一下页面的源代码吧,<textarea>之间是不是空了一大块
      

  9.   

    没有,<textarea>之间怎么会空一大块,就像下面的回复贴子的<textarea>控件一样正常输入文章,就会出现上述情况!
      

  10.   

    <TEXTAREA name="content" rows="20" cols="100"></TEXTAREA>
    就是这样的语法嘛,也没什么特别的
      

  11.   

    我苦笑,从11月12号我就开始在网上提问这个问题,问了好多地方,都没有解决的好办法,这不,今天研究了半天,发现struts中有bug,就想改用普通的JSP+BEAN吧,但是上面说的“本来文章的第一行是标题或是空两格,但现在在<textarea>显示时,第一行向后空很多格,而在页面上显示就是顶格”这个还是解决不了,愁人!我就想知道有没有人碰到过我这样的情况,都是怎么处理的,曾经有朋友说碰到过类似的情况,但问题出现在文章的末尾,总是多出几个null,我的问题是发生在前面,都一样闹人!!!
      

  12.   

    因为HTML并不认为你的空格是空格,html空格是&nbsp;所以html里面是顶格的。我建议你把一些特殊的字符都转意,然后针对html或者textarea, text等再转成相应的字符。
      

  13.   

    还有可以用DEBUG跟踪一下,看问题究竟在哪个环节上出现的,强烈建议DEBUG跟踪
      

  14.   

    我在往数据库中写入的时候除了进行ISOTOGB的转换外再没有其他的字符编码的转换,在读取的时候加了个换行符“\n”
    while((s=br.readLine())!=null){
     content+=s +"\n";
    }
    只有第一行出现顶格不能空格的情况,其它的一切正常,这难道和ISOTOGB有关系?
    DEGUG时也跟踪不出来什么东西,也看不出来是不是有空格。
    我郁闷!!!!
      

  15.   

    其实跟读写数据库和字符转换没有关系的,我也碰过这样的问题,我也不知怎么解决。
    我想问题出现在HTML页面上,当我们将数据写入<textarea>时,可能当中我们换了行,或者按了“tab”键,这样转化成html格式时被当成是输入了空格键。
      

  16.   

    我在TOAD中比较了一下数据库中存进去的内容,发现也是上面的问题,第一行顶格,说明存入的时候就有有问题,我试着手动改了一下数据库的内容,就是把第一行空出一些格来,然后我再重新读这刷新一下页面,我发现,根本就读不动了,就是一进在读取中的状态,页面根本就什么也显示不出来了!!!我现在不行了,TMD真的晕了!就第一行不让空格,其它行都没有问题!
      

  17.   

    我认为是你编码的时候出了问题,前面有人提到过,不如直接写byte流到数据库
      

  18.   

    byte流到数据库,我曾经试过一种方法,不行,你能举个例子吗?
      

  19.   

    200分求解决办法,有没有人啊!这里再没有的话,哪还有啊,天啊!就没有人用CLOB存储过东西吗,不可能吧!
      

  20.   

    help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!help!
      

  21.   

    另外请问一下,为什么我在用clob做字段类型时,当我要根据关键字查询这个字段时,用like,报错,说匹配的类型,那么我应该用什么能实现like一样的功能?
      

  22.   

    另外请问一下,为什么我在用clob做字段类型时,当我要根据关键字查询这个字段时,用like,报错,说不匹配的类型,那么我应该用什么能实现like一样的功能?
      

  23.   

    引用其它地方的一句话:“超过4000字的文本一般存储在CLOB中(MSQL、Sysbase是存放在Text中),在目前的Oracle版本(Oracle8i)中,对大字段CLOB仍然不支持在where子句直接的like操作,如何实现对存储在CLOB字段中的内容进行like查找呢?下面的文章或则能给你帮助。虽然在SQL*PLUS中能实现用select直接看到CLOB的内容,但是如何通过DBMS_LOB包实现对中文环境下的CLOB内容的读取一直没有找到好的方法(使用Documents中提到的Samples只适用英文字符集),这极大的限制了使用第3方软件开发工作的自由度”,TMD,这不完蛋了?
      

  24.   

    int ch;
                while ((ch = isr.read()) > -1)
                {
                    result.append((char)ch);
                }
      

  25.   

    我有用过Oracle的Clob,没有问题.我读写的都是英文字符串,大概也是这样实现的.
    为了分清问题在哪,建议楼主
    1.在存储之前,确认sys_news_infoform.getContent()的信息是无误的, 可以打印出来.
    2.在英文状态下做测试,以确认SQL实现没错. 具体就是去掉Util.iso2gb(),测试字符全用英文.
    如果有错,SQL和代码有问题,修;如果显示正常,问题在编码.
      

  26.   

    不是吧,oracle在处理这个问题时竟然这么差劲,还不如sqlserver一个text就搞定了呢,我真服了!
      

  27.   

    clob字段如何全文检索?实现像like一样的功能!?
      

  28.   

    是不能like,所以才问,应该怎么样实现像like一样的功能
      

  29.   

    楼主我没有怎么做类似这种的东西。但我记我们原来做应用时,插入的数据是全部包含html代码的文本(包括html 的format代码都是)。在从数据库取出来后,直接bean:write是没有什么问题的。
      

  30.   

    回楼上的,可是现在我只想插入一篇文章,都是正常的文字,就像在下面的回复的textarea中一样添入一篇文章,然后保存,再读出来,只是这样而已,只接用oracle中的varchar2就没有什么问题,只是它太小了,所以用clob,因而就搞出这么多问题了,搞来搞去,我竟然发现struts中有:
    “在使用struts1.0或1.1,连接oracle数据库,比如我在news表中有一个字段叫content,现在我在content中输入一篇文章,这篇文章是正常的格式,有标题(显示在文章的第一行,并且在中间位置),正文,正文的每个段落第一行都空两格。
    我先查看插入到数据库中的值是否正常,发现一切正常。现在当我用诸如
    <logic:iterate id="info" name="newsinfo">
    <bean:write name="info" property="content"/>
    </logic:iterate>
    查出来显示在网页中时,却是全都挤在一起,没有分段,没有空格。
    当用System.out.println(content);打字出来时,就是一切正常。”这样的错误,你说我多郁闷!
      

  31.   

    struts的问题已解决,这个编码是是可以控制的,你可以不让他给你过滤。
    有个属性叫“filter”
    <bean:write filter="flase" name="info" property="content"/>
    就没有问题了,但是每一行,还是顶格。
      

  32.   

    格式丢掉了是因为
    Textarea用的是平时文本文件的控制符,而HTML不认那些控制符号的阿
    比如空格,HTML要用&nbsp; 断行要用<br>等等,你要把取出来的文本
    处理一下才行。