简单问题送分,关于网上订票系统的票数的更新怎么做?
网上订票,防止更新出现错误,写的代码总有点不放心
stmt = connection.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE,
  ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(
        "SELECT TICKETNUM FROM DB_MOVIE_TICKET  WHERE  TICKID="
      + tickid );
rs.absolute(1);
if (rs.getInt("TICKETNUM") < 2)//每次订两张
   throw new SQLException("电影票已经被订购完");
rs.updateLong("TICKETNUM", rs.getInt("TICKETNUM")-2);
rs.updateRow();在SQL语句中加上“for update” 后变的好慢啊,而且最后一句
rs.updateRow();走不过去:(

解决方案 »

  1.   

    1. 建议使用CONCUR_UPDATABLE,而不是TYPE_SCROLL_INSENSITIVE,或者同步synchronize订票方法
    2. 
    if (rs.getInt("TICKETNUM") < 2)//每次订两张
       throw new SQLException("电影票已经被订购完");
    rs.updateLong("TICKETNUM", rs.getInt("TICKETNUM")-2);
    改为
    int nCount = rs.getInt("TICKETNUM") ;
    if (nCount < 2)//每次订两张
       throw new SQLException("电影票已经被订购完");
    rs.updateLong("TICKETNUM", nCount -2);
    这样少读了一次数据库
    3.sql中for update只用于触发器的创建与数据库游标的创建啊,与你现在的操作没有关系.
      

  2.   

    不好意思,第一点应该是用TYPE_SCROLL_SENSITIVE,而不是TYPE_SCROLL_INSENSITIVE
      

  3.   

    rs.updateLong("TICKETNUM", rs.getInt("TICKETNUM")-2); 是实现什么?