package org.caudexorigo.jdbc;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class DbFetcher<T>
{
public DbFetcher()
{
super();
}
public List<T> fetchList(final Db db, final String sql, RowConverter<T> extractor)
{
return fetchList(db, sql, extractor, new Object[0]);
}
public List<T> fetchList(final Db db, final String sql, RowConverter<T> extractor, Object... params)
{
ResultSet rs = null;
PreparedStatement ps = null;
if (db == null)
{
throw new NullPointerException("Using a 'null' Db");
}
try
{
ps = db.getPreparedStatement(sql);
rs = db.fetchResultSetWithPreparedStatment(ps, params);
List<T> lst = new ArrayList<T>();
while (rs.next())
{
T obj = extractor.process(rs);
lst.add(obj);
}
return lst;
}
catch (Throwable ex)
{
throw new RuntimeException(ex);
}
finally
{
Db.closeQuietly(rs);
if (!db.useStatementCache())
{
Db.closeQuietly(ps);
}
}
}
public List<T> fetchList(final DbPool dbPool, final String sql, final RowConverter<T> extractor, Object... params)
{
Db db = null;
try
{
db = dbPool.pick();
return fetchList(db, sql, extractor, params);
}
catch (Throwable ex)
{
throw new RuntimeException(ex);
}
finally
{
dbPool.release(db);
}
}
public List<T> fetchList(final DbPool dbPool, final String sql, final RowConverter<T> extractor)
{
return fetchList(dbPool, sql, extractor, new Object[0]);
}
public T fetchObject(final DbPool dbPool, final String sql, final RowConverter<T> extractor, Object... params)
{
Db db = null;
try
{
db = dbPool.pick();
return fetchObject(db, sql, extractor, params);
}
catch (Throwable ex)
{
throw new RuntimeException(ex);
}
finally
{
dbPool.release(db);
}
}
public T fetchObject(final DbPool dbPool, final String sql, final RowConverter<T> extractor)
{
return fetchObject(dbPool, sql, extractor, new Object[0]);
}
public T fetchObject(final Db db, final String sql, final RowConverter<T> extractor, Object... params)
{
PreparedStatement ps = null;
try
{
ps = db.getPreparedStatement(sql);
return fetchObject(db, ps, extractor, params);
}
catch (Throwable ex)
{
throw new RuntimeException(ex);
}
finally
{
if (!db.useStatementCache())
{
Db.closeQuietly(ps);
}
}
}
public T fetchObject(final Db db, final PreparedStatement pstmt, final RowConverter<T> extractor, Object... params)
{
ResultSet rs = null;
try
{
rs = db.fetchResultSetWithPreparedStatment(pstmt, params);
if (rs.next())
{
T obj = extractor.process(rs);
return obj;
}
else
{
return null;
}
}
catch (Throwable ex)
{
throw new RuntimeException(ex);
}
finally
{
Db.closeQuietly(rs);
}
}
}