DataSet ou DataTable no Java

3 respostas
pedroabs

Alguém conhece algum projeto em Java que se assemelhe ao DataTable ou até mesmo o DataSet do dot net?

Obrigado.

3 Respostas

Nicolas_Fernandes

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

thiagoarreguy

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();
          }
        }
    }
dieselpardal

[size=18]Será que tem codigo fonte de SetValueAt no JDataTable?[/size]

Criado 28 de outubro de 2009
Ultima resposta 29 de mai. de 2013
Respostas 3
Participantes 4