在A页面上点击超连接  打开一个新的页面B  同时A页面刷新一次   并且 A,B 俩页面都连接数据库  报错:你已经连接至数据库。只有在首先断开了连接的情况下才能建立新的连接。No operations allowed after statement closed.问题是我在其他地方用同样的方法 做了个C页面上点击超链接弹出D页面  C,D俩页面也都同时连数据库 就没有报错,  而A,B俩页面就会报错, 对比很多次也找不出差别。。  连数据库的代码里closed 方法都写了  不知道为什么还要报这个错!  

解决方案 »

  1.   


    是隔离开的 公司的框架有专门写数据库操作的地方   就是不明白为什么会报这种错, 我和同事昨天把A,B页面 与C,D
    页面对了一天, 不同的地方都该了 ,CD页面点多少次都不报错 ,AB页面点次数多了就报这个错 ,经常点一次就报错
    郁闷ing
      

  2.   

    单听你这样描述恐怕很难找出问题,报错说你关闭statement后不能再操作数据库了,你是每次操作完都断开连接完后有需求再打开连接?效率太低,用连接池吧
      

  3.   


    确实没有配连接池! 因为这个项目不大 所以产品经理也没让我们配, 我贴下代码把数据库的代码
    A,B页面连数据库private static final String SQLSTATEMENT_SELECT_PRODUCT_BY_PRIMARY_KEY = "SELECT "
    + PRODUCT_ID
    + ", "
    + PRODUCT_NAME
    + "," 
    + PRODUCT_START
    + ", "
    + PRODUCT_END
    + ", "
    + PRODUCT_PARENT
    + ", "
    + PRODUCT_NOTES
    + " FROM "
    + PRODUCT_TABLE
    + " WHERE "
    + PRODUCT_ID 
    + " = ? ";

     private StatementMetaData constructMetaDataForSelectProductByPrimaryKey(String sqlStr) throws DataException {
    StatementMetaData metaData = new StatementMetaData();
    metaData.setSQL(sqlStr);
    metaData.addTable(PRODUCT_TABLE);
    metaData.addParameter("PRODUCT_ID", String.class, Types.VARCHAR);
    return metaData;
    }
      
     /**
     * <P>Function: findProductByProductId
     * <P>Description:     
     * @author: luxu
     * @CreateTime: 2009-1-16 上午11:42:51
     * @param:          // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
     * @Return:         // 函数返回值的说明
     */
    public Product findProductByProductId(String id) throws DataException{
    DebuggingLog
    .printInformation("ProductConnector::findProductByProductId(..)  ---------- START");
    createConnection();
    Product product=new Product();
    String sqlStr = SQLSTATEMENT_SELECT_PRODUCT_BY_PRIMARY_KEY;
    try {
    DebuggingLog
    .printInformation("ProductConnector::findProductByProductId(..) --SQL--"
    + sqlStr); StatementMetaData metaData = constructMetaDataForSelectProductByPrimaryKey(
    sqlStr);
    SelectStatement statement = (SelectStatement) new OnlineSelectStatement(
    metaData, getDatabaseConnection());
    statement.setParameter(1, id);
    executeSelect(statement);
    SelectResult result = statement.getResult();
    product=processFindProductByProductIdQueryResult(result);
    result.close();
    statement.close();
    }catch (DataException dex) {
    throw dex;
    } finally {
    releaseConnection();
    }
    DebuggingLog
    .printInformation("ProductConnector::findProductByProductId(..) ---------- END");
    return product;
    }


    private Product processFindProductByProductIdQueryResult(SelectResult result) throws DataException {
    Product product=new Product();
    if(result!=null&&result.getNumRows()>0){
    if(result.getColumnValue(PRODUCT_ID)!=null){
    String productid=result.getColumnValue(PRODUCT_ID).toString();
    product.setProductId(productid);
    }
    if(result.getColumnValue(PRODUCT_NAME)!=null){
    String productName=result.getColumnValue(PRODUCT_NAME).toString();
    product.setProductName(productName);
    }
    if(result.getColumnValue(PRODUCT_START)!=null){
    String productStart=result.getColumnValue(PRODUCT_START).toString();
    product.setProductStart(productStart);
    }
    if(result.getColumnValue(PRODUCT_END)!=null){
    String productEnd=result.getColumnValue(PRODUCT_END).toString();
    product.setProductEnd(productEnd);
    }
    if(result.getColumnValue(PRODUCT_PARENT)!=null){
    String productFloor=result.getColumnValue(PRODUCT_PARENT).toString();
    product.setProduct_Parent(productFloor);
    }
    if(result.getColumnValue(PRODUCT_NOTES)!=null){
    String productNotes=result.getColumnValue(PRODUCT_NOTES).toString();
    product.setProduct_Notes(productNotes);
    }
    }
        return product;
    }下面是报错ProductHome::findProductByProductId(..) ---------- START
    2009-02-19 09:29:31.218 - DEBUG(4) {http-8080-Processor22} - ProductConnector::findProductByProductId(..)  ---------- START
    2009-02-19 09:29:31.218 - DEBUG(4) {http-8080-Processor22} - ProductConnector::findProductByProductId(..) --SQL--SELECT Product_Id, Product_Name,Product_Start, Product_End, Product_parent, Product_Notes FROM PRODUCT WHERE Product_Id = ? 
    2009-02-19 09:29:31.234 - DEBUG(5) {http-8080-Processor24} - VMSServlet doGet()
    2009-02-19 09:29:31.265 - DEBUG(5) {http-8080-Processor24} - VMSServlet doService()----------START
    2009-02-19 09:29:31.265 - DEBUG(5) {http-8080-Processor24} - HandlerRegistry: Entered : getRequestHandler() (HttpServletRequest)
    2009-02-19 09:29:31.265 - DEBUG(5) {http-8080-Processor24} - HandlerRegistry: Entered : getRequestHandler() - HttpServletRequest
    2009-02-19 09:29:31.265 - DEBUG(5) {http-8080-Processor24} - VMSServlet Invoking handler: class com.res.vms.handlers.ProductListHandler
    2009-02-19 09:29:31.265 - DEBUG(4) {http-8080-Processor24} - Current Session Id is EC2091EEC8BD3B88A914468CA8DC5DDC
    2009-02-19 09:29:31.265 - DEBUG(4) {http-8080-Processor24} - ProductHome::findAllProductInfo(..) ---------- START
    2009-02-19 09:29:31.265 - DEBUG(4) {http-8080-Processor24} - ProductConnector::findAllProductInfo(..)  ---------- START
    2009-02-19 09:29:31.265 - DEBUG(4) {http-8080-Processor24} - ProductConnector::findAllProductInfo(..) --SQL--select Product_Id , Product_Name , Product_Start , Product_End , Product_parent , Product_Notes FROM PRODUCT
    你已经连接至数据库。只有在首先断开了连接的情况下才能建立新的连接。
    2009-02-19 09:29:31.281 - DEBUG(4) {http-8080-Processor22} - ProductConnector::findProductByProductId(..) ---------- END
    2009-02-19 09:29:31.281 - DEBUG(4) {http-8080-Processor22} - ProductHome::findProductByProductId(..) ---------- END
    LocaleRenderer::render() - trying to dispatch to: /jsp/ProductListInfo.jsp
    2009-02-19 09:29:31.296 - DEBUG(5) {http-8080-Processor22} - Handler: ProductListInfo
    2009-02-19 09:29:31.296 - DEBUG(5) {http-8080-Processor22} - Page dispatch path: /VMS?ProductListInfo
    对于该语句,没有任何活动的数据库连接。 
    2009-02-19 09:29:31.296 - DEBUG(5) {http-8080-Processor22} - VMSServlet doService()----------END
    C ,D 页面就没有这个报错 很正常
      

  4.   

    是不是数据库每次连接的次数有限制啊,我记得当初用Oracle使用版的时候如果连接太多也会出现这样的问题。