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
*
*
Use this method for single inserts. In cases where
* several subsequent inserts for objects of the same class
* are required the use of method insert(Object, Record)
* is recommended instead to minimise instantiation
* overhead.
*
* @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
*
* Use this method for single inserts. In cases where
* several subsequent inserts for objects of the same class
* are required the use of method insert(Connection, Object, Record)
* is recommended instead to minimise instantiation
* overhead.
*
* @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;
}
}