001    /***************************************************************************************************
002     *               MODULE DESCRIPTION
003     ****************************************************************************************************
004     *
005     *               NAME:           StatementContainer.java
006     *               LANGUAGE:       Java2
007     *               DATE:           4.12.2002
008     *               AUTHOR:         Miika Nurminen, University of Jyväskylä
009     *
010     ****************************************************************************************************
011     *               COPYRIGHT (C) KIURU -PROJECT GROUP
012     *               Limited rights granted. Please refer to license
013     ****************************************************************************************************
014     *  
015     ****************************************************************************************************
016     *               UPDATES
017     ****************************************************************************************************
018     *
019     *   4.12.2002: Initial release / mn
020     *
021     ****************************************************************************************************/
022    package kiurubeans;
023    
024    import java.sql.*;
025    import kotkabeans.*;
026    
027    /**
028     * Container for StatementItems used in PreparedStatemens
029     * @see PreparedStatement
030     * @see StatementItem
031     */     
032    public class StatementContainer extends Object {
033      /** SQL content for statement*/
034      String statement;
035      /** Internal container for items*/
036      java.util.ArrayList items;
037      /** Result prepared statement*/
038      PreparedStatement ps = null;
039      /** Inherited StatementContainer used for batched updates */
040      StatementContainer inherited = null;
041      
042      /**
043       * Creates a new instance of StatementContainer with a given statement.
044       * @param statement SQL prepared statement string
045       */  
046      public StatementContainer(String statement) {
047        this.statement = statement;
048        items = new java.util.ArrayList();
049      }
050      
051      /**
052       * Used with batched updates (same statement with different parameters). 
053       * @param inherited StatementContainer with original statement (may not be prepared)
054       */  
055      StatementContainer(StatementContainer inherited) {
056        this.inherited = inherited;
057        items = new java.util.ArrayList();
058      }
059      
060      /**
061       * Adds new StatementItem to container
062       * @param s initialized StatementItem
063       */  
064      public void addStatement(StatementItem s) {
065        items.add(s);
066      }
067      
068      /**
069       * Sets ith StatementItem in container
070       * @param i index
071       * @param s initialized StatementItem
072       */
073      void setStatementItem(int i,StatementItem s) {
074        items.set(i, s);
075      }
076      
077      
078      /**
079       * Gets ith StatementItem in container
080       * @param i index
081       * @return  initialized StatementItem
082       */
083      StatementItem getStatementItem(int i) {
084        return (StatementItem)items.get(i);
085      }
086      
087     
088      /** Prepares statement and parameters.
089       * @param db open db connection
090       * @throws Exception if there is a problem during preparing the statement
091       */
092      void prepare(DB db) throws Exception {
093        if (inherited==null) 
094          ps = db.prepareStatement(statement);
095        else {
096          if (inherited.getStatement()==null) inherited.prepare(db);
097          ps = inherited.getStatement();
098        }
099        prepareItems();
100      }
101    
102      /** Assigns parameters for a prepared statement. Assumes that prepare is
103       *  called before. (ps must be set!)
104       *
105       * @throws Exception if there is a problem getting the items
106       */
107      void prepareItems() throws Exception {
108        if (items.size()==0) return; // no parameters.
109        getStatementItem(0).target=ps;
110        for (int i=0; i<items.size(); i++)
111          getStatementItem(i).assignItem(i+1);
112      }
113      
114      /**
115       * Returns prepared statement
116       * @return prepared statement
117       */
118      PreparedStatement getStatement() {
119        return ps;
120      }
121    }
122    /***************************************************************************************************
123     *               COPYRIGHT (C) KIURU -PROJECT GROUP
124     *               Limited rights granted. Please refer to license.
125     **************************************************************************************************/