package com.grendelscan.data.database;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import com.almworks.sqlite4java.SQLiteConnection;
import com.almworks.sqlite4java.SQLiteConstants;
import com.almworks.sqlite4java.SQLiteException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SelectJob extends DbJob<Object[][]>
{
private static final Logger LOGGER = LoggerFactory.getLogger(SelectJob.class);
public SelectJob(String query, Object[] values)
{
super(query, values);
}
@Override
protected Object[][] job(SQLiteConnection connection) throws Throwable
{
handleBindings(connection);
ArrayList<Object[]> results = null;
try
{
int columnCount = st.columnCount();
results = new ArrayList<Object[]>();
while (st.step())
{
Object[] row = new Object[columnCount];
results.add(row);
for (int i = 0; i < row.length; i++)
{
switch(st.columnType(i))
{
case SQLiteConstants.SQLITE_BLOB:
ObjectInputStream objstream = new ObjectInputStream(st.columnStream(i));
row[i] = objstream.readObject();
break;
case SQLiteConstants.SQLITE_NULL:
row[i] = null;
break;
case SQLiteConstants.SQLITE_TEXT:
row[i] = st.columnValue(i);
break;
case SQLiteConstants.SQLITE_INTEGER:
case SQLiteConstants.SQLITE_FLOAT:
default:
row[i] = st.columnValue(i);
}
}
}
st.dispose();
}
catch (SQLiteException e)
{
LOGGER.error("SQL problem: " + e.toString(), e);
throw e;
}
return results.toArray(new Object[0][0]);
}
}