搞错了,应该是:
public void read()  throws Exception{
DBConnect cn=new DBConnect("select * from BASIC where XH=?");
cn.setString(1,this.getXH());
ResultSet set=cn.executeQuery();
if (set.next())
{
                this.setXM(set.getString("XM"));
this.setXB(set.getString("XB"));
this.setZZMM(set.getString("ZZMM"));
         this.setMZ(set.getString("MZ"));
this.setSYSZD(set.getString("SYSZD"));
this.setZYH(set.getString("ZYH"));
this.setXSH(set.getString("XSH"));  //这行报错,注释掉就正常运行
..
           cn.close();
}
else 
{
throw new Exception("没有该学生资料.");
}

数据库字段类型均为text类型..

解决方案 »

  1.   

    this.setXSH(set.getString("XSH"));  //这行报错,注释掉就正常运行
    两中可能:
    一: this没有setXSH方法
    二:  表中没有 XSH 这个字段
      

  2.   

    如果是运行期例外,仔细检查一下,数据库中有没有“XSH”这个字段。
    如果是编译期,那么,贴出你的setXM、setZZMM方法的定义。
      

  3.   

    数据库有XSH字段的. /**
     * Sets the xM.
     * @param xM The xM to set
     */
    public void setXM(String xM) {
    XM = xM;
    }
    其他类推..
      

  4.   

    我搜索了一些回答,看大家还有什么更好的解决办法.thx 
     回复人: heartlessbug(多情臭虫) ( ) 信誉:100  2002-10-21 13:01:38  得分:8 
     
     
      
    sql的驱动不支持ResultSet的重复取值!如果你用的是oracle就不会出这样的错误了!我想你能够把ResultSet中的数据放到Vector中,这样就可以重复取值了,我就是这样做的!:)呵呵!
    还是oracle好阿!  
     
    Top 
     
     回复人: jeffsang(单杰圣士) ( ) 信誉:100  2002-10-21 14:10:26  得分:8 
     
     
      
    如果你采用的微软自己提供的sqlserver jdbc驱动,它支持ResultSet的重复取值,但如果你的表结构有所改动,比如修改了字段名,或者在某个位置插入一个字段,就会出现你碰到的问题我觉得应该是jdbc驱动的bug,用下面的办法倒可以解决该问题,但不是很理想,逼不得已
    pstmt = conn.prepareStatement(strSql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);good luck!  
     
    Top 
     
     该问题已经结贴 ,得分记录: cqfeng (2)、 linquan333 (2)、 heartlessbug (8)、 jeffsang (8)、  
     
     
     
     
        
    我如果按照sql取数据的顺序来rs.getString("")的话,没有问题,如果我不是按照哪个
    顺序取的话就抱上面的错误,比如 select a,b from test;
    我必须rs.getString("a")然后再rs.getString("b"),
    但如果我rs.getString("b")然后再rs.getString("a"),就会出现上面的问题。
    以前我写的类没有遇到上面的问题,我的数据库为sqlserver.94这样了,不能回头取数据的我也正好遇到这个问题,看过各种资料,结合自己的经验,觉得问题可能是该表中有text、image等大对象字段,才会发生上述错误。以上结论仅供参考!