
org.eobjects.metamodel.jdbc.JdbcDataSet Maven / Gradle / Ivy
/**
* eobjects.org MetaModel
* Copyright (C) 2010 eobjects.org
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.eobjects.metamodel.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.eobjects.metamodel.MetaModelException;
import org.eobjects.metamodel.data.AbstractDataSet;
import org.eobjects.metamodel.data.DefaultRow;
import org.eobjects.metamodel.data.Row;
import org.eobjects.metamodel.query.Query;
import org.eobjects.metamodel.query.SelectItem;
/**
* DataSet implementation that wraps a JDBC resultset.
*
* @author Kasper Sørensen
*/
final class JdbcDataSet extends AbstractDataSet {
private static final Logger logger = LoggerFactory
.getLogger(JdbcDataSet.class);
private final Statement _statement;
private final ResultSet _resultSet;
private final SelectItem[] _selectItems;
private final JdbcDataContext _jdbcDataContext;
private final Connection _connection;
private Row _row;
public JdbcDataSet(Query query, JdbcDataContext jdbcDataContext,
Connection connection, Statement statement, ResultSet resultSet) {
if (query == null || statement == null || resultSet == null) {
throw new IllegalArgumentException("Arguments cannot be null");
}
List items = query.getSelectClause().getItems();
_selectItems = items.toArray(new SelectItem[items.size()]);
_jdbcDataContext = jdbcDataContext;
_connection = connection;
_statement = statement;
_resultSet = resultSet;
}
public JdbcDataSet(SelectItem[] selectItems,
JdbcDataContext jdbcDataContext, Connection connection,
Statement statement, ResultSet resultSet) {
if (selectItems == null || statement == null || resultSet == null) {
throw new IllegalArgumentException("Arguments cannot be null");
}
_selectItems = selectItems;
_jdbcDataContext = jdbcDataContext;
_connection = connection;
_statement = statement;
_resultSet = resultSet;
}
/**
* {@inheritDoc}
*/
@Override
public Row getRow() {
return _row;
}
/**
* {@inheritDoc}
*/
@Override
public boolean next() throws MetaModelException {
try {
boolean result = _resultSet.next();
if (result) {
Object[] values = new Object[_selectItems.length];
for (int i = 0; i < values.length; i++) {
values[i] = _resultSet.getObject(i + 1);
try {
// some drivers return boxed primitive types in stead of
// nulls (such as false in stead of null for a Boolean
// column)
if (_resultSet.wasNull()) {
values[i] = null;
}
} catch (Exception e) {
logger.debug(
"Could not invoke wasNull() method on resultset, error message: {}",
e.getMessage());
}
}
_row = new DefaultRow(_selectItems, values);
} else {
_row = null;
}
return result;
} catch (SQLException e) {
logger.error(e.getMessage(), e);
}
return false;
}
/**
* {@inheritDoc}
*/
@Override
public void close() {
_jdbcDataContext.close(_connection, _resultSet, _statement);
}
/**
* {@inheritDoc}
*/
@Override
public SelectItem[] getSelectItems() {
return _selectItems;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy