Quem usa ADO.NET rotineiramente sabe o quão importante é o conjunto de objetos disponíveis pelo framework para trabalho com Datasets. Entre os objetos existentes meu favorito é o DataTable, um versátil componente que mantem uma representação tabular de um conjunto de dados (uma tabela em um banco de dados, por exemplo) o qual podemos carregar e usar em modo “offline”.
DataTable permite, dentre outras coisas, carregar seus dados a partir de um DataProvider qualquer (Oracle, MySQL, Postgree, etc) ou diretamente a através de um arquivo XML (sem conexão com um banco de dados) o que é especialmente útil em muitas situações de programação.
E para quem programa em Java? Como sabemos, a API JDBC não possui algo semelhante e o “primo” mais parecido com o DataTable, funcionalmente falando, seria o objeto ResultSet – o qual requer uma conexão ativa durante todo o tempo em que você estiver lendo ou alterando uma linha retornada.
Pois bem, recentemente ao portar um sistema desenvolvido em .NET para Java, me deparei com a necessidade de ter algo semelhante ao DataTable – especialmente após constatar que a adaptação do modelo para o equivalente em JDBC aumentaria significativamente o número de linhas de código do sistema. Um dos requerimentos era justamente poder carregar um Dataset e encerrar a conexão com o banco de dados imediatamente, liberando-a para outros processos concorrentes.
Com esta motivação, criei um novo componente com algumas características-chave do DataTable e o adicionei à biblioteca TinySQL (um “wrapper” para o JDBC que desenvolvi há alguns anos). Para se ter uma ideia da sintaxe da coisa, eis um pequeno trecho de código de uma das rotinas de teste do novo DataTable – e que usa também o objeto Query de TinySQL:
public void DataTableTest(ConnectionFactory factory) throws SQLException {
// Cria uma query para obter retornar dados do banco
Query query = new Query(factory.getConnection());
// Define uma consulta em uma tabela de usuarios
query.setSQL("SELECT * FROM TSYS_USUARIO");
// Executa a query
query.open();
// Cria nosso DataTable
DataTable table = new DataTable();
// Carrega o objeto DataTable com todas as linhas retornadas pela Query
table.load(query.getResultSet());
// A query pode ser fechada logo em seguida !
query.close();
// Itera sobre cada linha e exibe o conteudo de uma coluna
for (DataRow row : table.getRows()) {
System.out.println(row.getColumn("TSYS_NOME").getValue().toString());
}
}
Como se pode perceber, o DataTable “for Java” possui aplicação semelhante ao de seu similar em .NET, incluindo os objetos DataColumn e DataRow. Esta prova de conceito inicial possui algumas limitações, como não permitir alterar o dataset associado (algo que até faz sentido se a intenção for usá-lo apenas no modo offline) e também não permite carregar ou salvar o conjunto de dados a partir de um arquivo XML – feature que fica para a próxima versão.

