http://expert.csdn.net/Expert/topic/1991/1991465.xml?temp=.6180231

解决方案 »

  1.   

    SQLServer的驱动好像要按顺序来读,比如
    select data1,data2 from...你就要
    rs.getString("data1");
    rs.getString("data2");
    反过来就不行,不知你的是不是这种情况
    读日期用getTimestamp()肯定可以
      

  2.   

    1.如果你采用jdbc-odbc驱动。那么只能告诉你,你必须按照查询的顺序去获取顺序的字段。如果打乱顺序,或重复查询同一列,将会获取null或抛出上面的异常。
    3.如果你采用MS自己的JDBC驱动。那么在查询语句中不包含blob或clob字段(就是Image和Text类型)的时候,查询是支持re-read方式的,可以非顺序查询。但是一旦包含的blob或clob字段。那么就必须按照顺序查询,且不支持重复查询
      

  3.   

    我的查询语句中确实包含了text字段,但我是从多个表里读字段。那是按什么顺序啊,
    比如select * from A,B,C我要先取A表的字段,再取B和C表的字段吗?就是表的顺序是按from里面的顺序吗?重复查询是什么意思啊?
    是一个字段查询多次吗
    一般通过sql语句读取字段是不会多次读一个字段的吧
      

  4.   

    我的jsp代码:
    String ls_sql = "SELECT TASKLIST.TASKLIST,TASKLIST.PROCESSINS,TASKLIST.TASKNO,TASKLIST.CREATETIME,TASKLIST.RECTIME,TASKLIST.DEALTIME,TASKLIST.FINISHTIME,TASKLIST.DEADLINE,TASKLIST.INPUTINFO,TASKLIST.OUTPUTINFO,TASKLIST.REMARK,PROCESSMODEL.NAME,NODE.NAME FROM TASKLIST,PROCESSINS,PROCESSMODEL,NODE WHERE (TASKLIST.PROCESSINS = PROCESSINS.PROCESSINS) and (PROCESSINS.PROCESSMODEL=PROCESSMODEL.PROCESSMODEL) and (TASKLIST.CURRENTNODE = NODE.NODE ) and TASKLIST.TASKLIST = '"+ls_taskid+"'";
      ResultSet rs = WatchProcessBeanId.ReData(ls_sql);因为我用到多个表,但其中tasklist表中的内容最多,这个表的读取字段已经按顺序了,
    但还是报同样的错误!org.apache.jasper.JasperException: [Microsoft][SQLServer 2000 Driver for JDBC]ResultSet can not re-read row data for column 3.
      

  5.   

    我的查询语句中确实包含了text字段,但我是从多个表里读字段。那是按什么顺序啊,
    比如select * from A,B,C我要先取A表的字段,再取B和C表的字段吗?就是表的顺序是按from里面的顺序吗?--------------
    不是,  是按记录条随便就行,同一条记录,先取谁后取谁并不会导致错误
    你的问题,我想应该是你数据库连接bean有问题或者是jdbc驱动有问题。你把连接处理查询的代码贴出来
      

  6.   

    这是我连接数据库的bean的代码。我用的是jboss,是通过jboss的xml的上下文取的数据库名和服务器:
    import java.sql.*;
    import javax.sql.DataSource;
    import javax.naming.NamingException;
    import javax.naming.Context;
    import javax.naming.InitialContext;public class WatchProcessBean {
      private static Connection conn;  public WatchProcessBean() {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      private void jbInit() throws Exception {
        Context ctx = getJBossInitialContext();    //look up jndi name
        DataSource lds_data = (DataSource)ctx.lookup("java:/MSSQLDS");
        conn = lds_data.getConnection();
      }  private javax.naming.Context getJBossInitialContext() throws NamingException {
        java.util.Hashtable JNDIParm = new java.util.Hashtable();
        JNDIParm.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
        JNDIParm.put(Context.PROVIDER_URL, "localhost");
        JNDIParm.put("java.naming.rmi.security.manager", "yes");
        JNDIParm.put(Context.URL_PKG_PREFIXES,  "org.jboss.naming");
        return new InitialContext(JNDIParm);
      }  public static ResultSet ReData(String as_sql){
        try{
          PreparedStatement stmt = conn.prepareStatement(as_sql);
          ResultSet lrs_data= stmt.executeQuery();
          return lrs_data;
        }catch(Exception e){
          e.printStackTrace();
          return null;
        }  }
    }
      

  7.   

    在JSP中传递一个sql语句到Bean里就可以返回一个ResultSet结果集。
    在Jsp中的部分代码:
    ls_sql="select * from test";
    ResultSet rs = WatchProcessBeanId.ReData(ls_sql);
      

  8.   

    我也这么做过没问题啊,我用getString ,getDate都没问题,只要按顺序取不会出错
      

  9.   

    我的sql语句:
    String ls_sql = "SELECT TASKLIST.TASKLIST,TASKLIST.PROCESSINS,TASKLIST.TASKNO,TASKLIST.CREATETIME,TASKLIST.RECTIME,TASKLIST.DEALTIME,TASKLIST.FINISHTIME,TASKLIST.DEADLINE,TASKLIST.INPUTINFO,TASKLIST.OUTPUTINFO,TASKLIST.REMARK,PROCESSMODEL.NAME,NODE.NAME FROM TASKLIST,PROCESSINS,PROCESSMODEL,NODE WHERE (TASKLIST.PROCESSINS = PROCESSINS.PROCESSINS) and (PROCESSINS.PROCESSMODEL=PROCESSMODEL.PROCESSMODEL) and (TASKLIST.CURRENTNODE = NODE.NODE ) and TASKLIST.TASKLIST = '"+ls_taskid+"'";
      ResultSet rs = WatchProcessBeanId.ReData(ls_sql);因为是多个表啊,我已经按循序取了啊,但还是报错!多个表的话,表的循序是什么?