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