Alguém conhece algum projeto em Java que se assemelhe ao DataTable ou até mesmo o DataSet do dot net?
Obrigado.
Alguém conhece algum projeto em Java que se assemelhe ao DataTable ou até mesmo o DataSet do dot net?
Obrigado.
Olá, Pedro!
Beleza?
Não, no Java não há um DataSet ou um DataTable.
(Também adoraria que tivesse, mas… hehe)
O melhor que você pode fazer é montar uma Collection com seus dados, retornar para sua View e criar uma classe para desenhar sua Table!
[]s
Pessoal, fiz uma implementação MUITO simples de uma estrutura de dados parecida com a funcionalidade DataTable do .NET , porém sem a parte visual.
Ela é muito util para transitar dados entre uma camada e outra do modelo MVC, permitindo que por exemplo nas classes de visao, nao tenha nenhum tipo import de classes SQL…
O construtor dele recebe um result set do MySQL.
//===================================================================================================================
import java.util.Map;
import java.util.HashMap;
import java.util.Vector;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
/**
* @author Thiago Arreguy 22/12/2011
*/
public class JDataTable
{
private Map<Integer, Map<String,Object> > mData;
private Vector<String> mColumnNames;
public JDataTable(ResultSet rs)
{
this.mColumnNames = new Vector<String>();
this.mData = new HashMap<Integer, Map<String,Object> >();
setColumnNames(rs);
populate(rs);
}
private void setColumnNames(ResultSet rs)
{
try
{
// Get result set meta data
ResultSetMetaData rsmd = rs.getMetaData() ;
int numColumns = rsmd.getColumnCount();
//System.out.println("numColumns: " + numColumns);
// Get the column names; column indices start from 1
for (int i=1; i<=numColumns; i++)
{
String columnName = rsmd.getColumnName(i);
mColumnNames.add(columnName);
//System.out.println(i +"\t".concat(columnName));
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void populate(ResultSet rs)
{
try
{
if ( rs != null )
{
while ( rs.next() )
{
Map<String,Object> mpValue = new HashMap<String,Object>();
for (int i=1; i<=this.mColumnNames.size(); i++)
{
String key = this.mColumnNames.get(i-1); //index comeca em 0
Object value = rs.getObject(i);
value = rs.wasNull() ? "" : value;
mpValue.put(key, value);
//System.out.println(i +"\t".concat(key).concat("\t").concat(value.toString()));
}
int key = rs.getRow();
this.mData.put(new Integer(key), new HashMap<String,Object>((mpValue)));
//System.out.println("ROW:\t" + key );
mpValue.clear();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public int getColumnCount()
{
return this.mColumnNames.size();
}
public int getRowCount()
{
return this.mData.size();
}
public String getColumnName(int col)
{
return this.mColumnNames.get(col-1);
}
public Object getValueAt(int row, String col)
{
Map<String,Object> mpValue = this.mData.get(row);
return mpValue.get(col);
}
}
// Chamada teste para a classe
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
public static void main (String [] args)
{
MySQL db = new MySQL("127.0.0.1:3306","world","root","123456");
String query;
if ( db.connect() )
{
System.out.println("Conectado!");
System.out.println("Rodando uma query contra o banco");
query = "SELECT * FROM city";
ResultSet rs = db.executeRS(query);
try
{
if ( rs != null )
{
JDataTable dt = new JDataTable(rs);
System.out.println("--------------------------------?????????-");
System.out.println("USANDO JTABLE-------------------?????????-");
System.out.println("--------------------------------?????????-");
String columnName = "";
for (int j=1; j<=dt.getColumnCount(); j++)
{
columnName = columnName + dt.getColumnName(j) + "\t";
}
System.out.println(columnName);
for (int i=1; i<=dt.getRowCount(); i++)
{
String columnValue = "";
for (int j=1; j<=dt.getColumnCount(); j++)
{
String col = dt.getColumnName(j);
columnValue = columnValue + dt.getValueAt(i,col).toString() + "\t";
}
System.out.println(columnValue);
}
System.out.println("--------------------------------?????????-");
System.out.println("MODO CONVENCIONAL---------------?????????-");
System.out.println("--------------------------------?????????-");
System.out.println("Name \tDistrict");
rs.first();
while ( rs.next() )
{
System.out.println(rs.getString("Name") + "\t" + rs.getString("District"));
}
System.out.println("--------------------------------?????????-");
}
}
catch ( SQLException e )
{
e.printStackTrace();
}
}
}
[size=18]Será que tem codigo fonte de SetValueAt no JDataTable?[/size]