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 **************************************************************************************************/