| package de.uhilger.baselink; | 
|   | 
| import java.sql.Connection; | 
| import java.sql.PreparedStatement; | 
| import java.sql.SQLException; | 
| import java.util.logging.Level; | 
| import java.util.logging.Logger; | 
|   | 
| /** | 
|  * | 
|  * @author Ulrich Hilger | 
|  */ | 
| public class Inserter extends DBActor { | 
|   | 
|   private static final Logger logger = Logger.getLogger(Inserter.class.getName()); | 
|    | 
|   public Inserter(PersistenceManager pm) { | 
|     this.pm = pm; | 
|   } | 
|   | 
|   /** | 
|    * Add an object to the database | 
|    * | 
|    * <p>Use this method for single inserts. In cases where | 
|    * several subsequent inserts for objects of the same class | 
|    * are required the use of method <code>insert(Object, Record)</code> | 
|    * is recommended instead to minimise instantiation | 
|    * overhead.</p> | 
|    * | 
|    * @param o  the object to add | 
|    * @return  the added object | 
|    */ | 
|   public Object insert(Object o) { | 
|     return insert(o, new GenericRecord(o.getClass())); | 
|   } | 
|   | 
|   /** | 
|    * Add an object to the database | 
|    * | 
|    * <p>Use this method for single inserts. In cases where | 
|    * several subsequent inserts for objects of the same class | 
|    * are required the use of method <code>insert(Connection, Object, Record)</code> | 
|    * is recommended instead to minimise instantiation | 
|    * overhead.</p> | 
|    * | 
|    * @param c  the connection to use, expected to be open and established | 
|    * @param o  the object to add | 
|    * @return  the object added to the database | 
|    */ | 
|   public Object insert(Connection c, Object o) { | 
|     return insert(c, o, new GenericRecord(o.getClass())); | 
|   } | 
|   | 
|   /** | 
|    * Add an object to the database | 
|    * @param o object to add | 
|    * @param record  reference to object to use to map between object and database | 
|    * @return  the added object | 
|    */ | 
|   public Object insert(Object o, Record record) { | 
|     Connection c = null; | 
|     try { | 
|       c = pm.getConnection(); | 
|       o = insert(c, o, record); | 
|       c.close(); | 
|       c = null; | 
|     } catch (SQLException ex) { | 
|       logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); | 
|     } finally { | 
|       pm.closeConnectionFinally(c); | 
|     } | 
|     return o; | 
|   } | 
|   | 
|   /** | 
|    * Add an object to the database | 
|    * @param c the connection to use, expected to be open and established | 
|    * @param o object to add | 
|    * @param record reference to object to use to map between object and database | 
|    * @return  the object that was added | 
|    */ | 
|   public Object insert(Connection c, Object o, Record record) { | 
|     Object addedObject = null; | 
|     PreparedStatement ps = null; | 
|     try { | 
|       ps = record.getInsertStatment(c, o); | 
|       ps.executeUpdate(); | 
|       ps.close(); | 
|       ps = null; | 
|       addedObject = o; | 
|     } catch (Exception ex) { | 
|       logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); | 
|     } finally { | 
|       pm.closeStatementFinally(ps); | 
|     } | 
|     return addedObject; | 
|   } | 
|    | 
|    | 
| } |