1、在链接数据库的jsp bean中用到了连接池,  多用户访问网站时,需要把下面回帖一的
getResultset和executeSql方法放在同步块中么?
2、数据库中有个字段限制最多有400个人填写(比如一个班最多可以报名400人),我把这个功能直接放在jsp里了,如回帖二
为了防止有多于400人写入这个字段,应该用同步吗?
对这个地方我很模糊,请大家给我讲讲

解决方案 »

  1.   


    public class SqlConn
    {
       private Connection conn = null;
    private Statement  stmt=null;
    private ResultSet  rs=null;

    //注意构造函数不许有返回值,即使void也不行!!!!!!!!!
    public SqlConn() throws SQLException
    {
    //getStatement();
    stmt=getStatement();
    }
    public Statement getStatement() throws SQLException
    {
      
        DataSource ds = null;
        try
        {
        Context ctx = new InitialContext();
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/sqlserver");
         if (ds != null)
         {
              conn = ds.getConnection();
         }
       
        }catch(Exception e)
        {
         e.printStackTrace();
        }
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
        return stmt;
    } public ResultSet getResultset(String sql) throws SQLException
    {
    //stmt=getStatement();
    rs = stmt.executeQuery(sql);
    return rs;
    } public int executeSql(String sql) throws SQLException
    {
    //stmt=getStatement();
    int rs = stmt.executeUpdate(sql); return rs;
    } public void dbClose()
    {
         try { 
      if (rs != null)        rs.close(); 
                      if (stmt != null)      stmt.close();                     
                      if (conn != null)       conn.close(); 
                        
                 }catch (SQLException e) 
         { 
                        System.out.println(e); 
                 }
    }

    }
      

  2.   


    <%!
    public synchronized String executeUpdate(String sql_students_count,String sql_students_regist)
    {
    try{
     SqlConn sqlconn=new SqlConn();
     ResultSet rs=sqlconn.getResultset(sql_students_count);
     if(rs.next())
     {
    if(rs.getInt(1)<400)//同时选择这个时间的人数   不能大于4     否则返回错误信息
    {
     sqlconn.executeSql(sql_students_regist);
     sqlconn.dbClose();
     return "succ";
    }
    else//人数超了
    {
    return "full";
    }
     }
     else
    {
     return "server";
     }

    }catch(Exception e)
    {
    e.printStackTrace();

    return "server";
    }
    }
    %>
      

  3.   

    从你的需求来看,我觉得没有必要synchronized关键字,这个一般是用于多线成的编程的。你现在需要的是一个逻辑判断的,在每次插入数据库前判断一下,是否已经有400个人报名了,如果为真,则拒绝再报名。另外一个就是你这系统的问题是要考虑数据库中锁的问题,防止读脏数据,在代码中加入事务控制等。