Maawii
Maawii

Reputation: 21

How to remove duplicate rows from JTable?

In this class, I am trying to only keep one of each value in the JTable. The Data is coming from a Database. I dont need repetative data though.

public JTable getHeute(){

            DBconnect verbinden = new DBconnect();
            verbinden.erstelleVerbindung();

            JTable Habwesend=new JTable();
            Habwesend.setBounds(10, 30, 290, 400);
            Habwesend.setEnabled(false);
            DefaultTableModel dm=new DefaultTableModel();

            try {
            ResultSet rs= verbinden.sqlStatement.executeQuery("select MA_ID from AB_Spanne where(Date() >= Start and Date() <= Ende)");
            ResultSetMetaData rsmd=rs.getMetaData();
            //Coding to get columns-
            int cols=rsmd.getColumnCount();
            String c[]=new String[cols];
            for(int i=0;i<cols;i++){
                c[i]=rsmd.getColumnName(i+1);
                for (int k = 0; k < c.length; k++) {
                    dm.addColumn(c[k]);
                }



            }

            Object row[]=new Object[cols];
            while(rs.next()){
                for(int i=0;i<cols;i++){
                        row[i]=rs.getString(i+1);
                    }
                dm.addRow(row);
            }


            Habwesend.setModel(dm);
            verbinden.schliesseVerbindung();


    }

Upvotes: 1

Views: 2854

Answers (2)

hd1
hd1

Reputation: 34657

Instead of the List, use a Set and keep the rest of your code the same. That's your java solution, to whit:

// Set dm = new HashSet();
  Object row[]=new Object[cols];
            while(rs.next()){
                for(int i=0;i<cols;i++){
                        row[i]=rs.getString(i+1);
                    }
                dm.addRow(row);
            }
           Habwesend.setModel(dm);
            verbinden.schliesseVerbindung();

Upvotes: 0

CloudyMarble
CloudyMarble

Reputation: 37566

Change your query to:

"SELECT DISTINCT MA_ID from AB_Spanne where(Date() >= Start and Date() <= Ende)"

You can do it in java like (unrecommended and unperformant):

//UNTESTED CODE
List<Object> Objectlist = new List<Object>();
// ...
Object row[]=new Object[cols];

while(rs.next()){

   for(int i=0;i<cols;i++){
      row[i]=rs.getString(i+1);
   }

   if !(Objectlist.Contains(row)){
      dm.addRow(row);
   }
}

// I guess in order to the contains methode to work you may need to create own objects in which you override the equality / comparrision methods.

Upvotes: 1

Related Questions