stmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);

解决方案 »

  1.   

    我不是通过这种方式连的数据库阿,是通过ofbiz,如下:
    String helper = delegator.getEntityHelperName("Product");
    SQLProcessor sqlP = new SQLProcessor(helper);
    StringBuffer query = new StringBuffer();
    ResultSet rs = null;
    try{
    sqlP.prepareStatement(sqlString);
    rs = sqlP.executeQuery();
    }catch{.....}
      

  2.   

    你看看SQlProcessor 或者prepareStatement方法 肯定有设置结果集类型的
      

  3.   

    是啊,肯定有setType之類的方法,默認的隻可用rs.next();
      

  4.   

    有rs.next()的,我也可以执行rs.next()。但是将rs return回调用它的方法,就不能用rs.next()了。这是什么原因呢?
      

  5.   

    我的调用关系如下:
    performSearchCsc(...)
    {
    ......
      ResultSet rs = null;
      try
      {
         rs = InventoryDao.searchCscAll(delegator, fields);
        WriteData(rs);
      }
    ......
    }
    public static ResultSet searchCscAll(...)
    {
        写sql语句;
        rs = sqlP.executeQuery();//得到查询结果,有数据。
        return rs;
    }
    private void WriteData(ResultSet rs)
    {
    ....
    while (rs.next()){}
    .... {
    }
    目前,在searchCscAll()里面用rs.next()是没有问题的。
    在performSearchCsc()里用rs.next()也是没有问题的。
    但是在private void WriteData(ResultSet rs)里用rs.next()就抱错
    “COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0125E  函数顺序错误。 SQLSTATE=HY010”
      

  6.   

    last
    public boolean last()
                 throws SQLExceptionMoves the cursor to the last row in this ResultSet object. Returns:
    true if the cursor is on a valid row; false if there are no rows in the result set 
    Throws: 
    SQLException - if a database access error occurs or the result set type is TYPE_FORWARD_ONLY
    Since: 
    1.2 
    //the result set type is TYPE_FORWARD_ONLY时会抛出异常。所以应该把result set类型给改成直接访问最后一个row的。
      

  7.   

    我查了我的prepareStatement,发现有2种。
    public void prepareStatement(String sql) throws GenericDataSourceException, GenericEntityException {
            this.prepareStatement(sql, false, 0, 0);
        }        public void prepareStatement(String sql, boolean specifyTypeAndConcur, int resultSetType, int resultSetConcurrency) throws GenericDataSourceException, GenericEntityException {
            if (Debug.verboseOn()) Debug.logVerbose("[SQLProcessor.prepareStatement] sql=" + sql, module);        if (_connection == null) {
                getConnection();
            }        try {
                _sql = sql;
                _ind = 1;
                //add by gary at 2003-12-01
                synchronized(this)
                {
                  if (specifyTypeAndConcur) {
                      _ps = _connection.prepareStatement(sql, resultSetType, resultSetConcurrency);
                  } else {
                      _ps = _connection.prepareStatement(sql);
                  }
                }
            } catch (SQLException sqle) {
                throw new GenericDataSourceException("SQL Exception while executing the following:" + sql, sqle);
            }
        }
    能告诉我第2种怎么用么?boolean specifyTypeAndConcur, int resultSetType, int resultSetConcurrency不太明白
      

  8.   

    prepareStatement(String sql, boolean specifyTypeAndConcur, int resultSetType, int resultSetConcurrency)
    试一试
    prepareStatement(String sql, true, 1, 1) 
    没有用过,不过你把各种组合都试一试,应该可以