本帖最后由 wangdbeyond 于 2010-05-11 12:24:28 编辑

解决方案 »

  1.   

    永不着交互两次。
    题目和选项一起提交到后台servlet(或另一jsp,不知道你用没用框架,whatever,反正就是处理的servlet)。
    然后servlet里面启事务调用存储过程处理好了。
    不知道你的什么数据库?oracle支持数组,mysql不支持数组。
    启事务调用两个存储过程:public static int insertVersionIncre(String versionId,
    List<VersionIncreObj> lst, String userId) throws Exception {
    IConnection icon = null;
    ICallableStatement cs = null;
    int ret = -10000;
    try {
    icon = DbFactory.getInstance().getConnection(DBI.GLOBAL.DB);
    icon.setAutoCommit(false);
    cs = icon.prepareCall(proc_ins_version_incre);
    // 循环插入增量包记录
    for (int i = 0; i < lst.size(); i++) {
    VersionIncreObj vio = lst.get(i); cs.setString(1, userId);
    cs.setString(2, vio.getIncrementId());
    cs.setString(3, vio.getStartId());
    cs.setString(4, vio.getEndId());
    cs.setString(5, vio.getFilePos());
    cs.setBigDecimal(6, new BigDecimal(vio.getFileSize()));
    cs.setString(7, vio.getIsSetupVm());
    cs.setString(8, vio.getMd5());
    cs.registerOutParameter(9, Types.INTEGER);
    cs.execute(); ret = cs.getInt(9); if (ret == -1) {
    break;
    }
    }
    // 如果失败,则回滚,否则修改状态。
    if (ret == -1) {
    icon.rollback();
    } else {
    cs.close();
    cs = icon.prepareCall(proc_upd_vb_incre_status);
    cs.setString(1, userId);
    cs.setString(2, versionId);
    cs.setString(3, TYPES.VersionBaseType.YES);
    cs.registerOutParameter(4, Types.INTEGER);
    cs.execute();
    ret = cs.getInt(4);
    // 如果修改状态失败,则回滚,否则提交。
    if (ret == -1) {
    icon.rollback();
    } else {
    icon.commit();
    }
    }
    } catch (Exception e) {
    if (icon != null) {
    try {
    icon.rollback();
    } catch (SQLException e1) {
    e1.printStackTrace();
    }
    }
    e.printStackTrace();
    } finally { if (cs != null) {
    try {
    cs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if (icon != null) {
    try {
    icon.setAutoCommit(true);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    try {
    icon.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    return ret;
    }
      

  2.   

    先把题目添加到数据库里面去.
    添加完毕之后去数据库里找最后添加的一条记录返回ID
    然后再添加选项,这样题目的id不就有了吗!!!