Duvida JTable

Pessoal to com o seguinte problema:
Eu consegui fazer a consulta no mysql e jogar na tabela, mas quando eu faço uma nova consulta aparece tudo certinho até que eu clique sobre uma das linhas ai aparece a consulta que eu havia feito anteriormente. Como se a nova consulta ficasse sobreposta a velha consulta.
Acredito que deveria zerar minha list, mas nao sei como fazer isso, e to com muita duvida de como zerar a list no modelo ou na classe onde estou usando a jtable… enfim, vou postar o codigo e se alguem puder me ajudar… Procurei muitos exemplos de jtable mas nao achei só com enviando os dados direto para tabela, ou seja , ja carregar a tabela de cara e nao é isso que eu quero.


package programa;
//import ButtonRenderer;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;


public class Consultar extends Interface implements ActionListener{
	
	JComboBox CombTabela, CombComputador,CombImpressora, CombOcorrencia, CombNextel, CombEvento ;
	JTextField txConsult;
	JButton BtConsultar, BtAlterar, BtExcluir;
	String strTabela="", strCondicao=""; 
	JLabel LConsult;
	int Counter;
	
	//bd
	private Connection conexao;
	private Statement meuState;
	private ResultSet rs;
	
	private ArrayList dados;
	private String[] colunas;
	String A,B,C,D,E,F,G,H;

	//tabela

	
	public Consultar()
	{		
		
		LConsult= new JLabel("Consultar");
		LConsult.setBounds(250,20,150,20);
		
		BtConsultar= new JButton ("Consultar");
		BtConsultar.setBounds(450,80,90,20);
		BtConsultar.addActionListener(this);
		
		BtAlterar= new JButton ("Alterar Linha Selecionada");
		BtAlterar.setBounds(100,400,200,20);
		BtAlterar.addActionListener(this);
		
		BtExcluir= new JButton ("Excluir");
		BtExcluir.setBounds(450,400,90,20);
		BtExcluir.addActionListener(this);
		
		txConsult= new JTextField();
		txConsult.setBounds(450,52,150,20);
		
		
		CombTabela = new JComboBox();
		CombTabela.addItem(" Computador");
		CombTabela.addItem(" Impressora");
		CombTabela.addItem(" Ocorrência");
		CombTabela.addItem(" Nextel");
		CombTabela.addItem(" Evento");
		CombTabela.setBounds(35,52,120,20);
		CombTabela.setSelectedIndex(-1);
		CombTabela.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=0;
				Counter++;
			  switch(CombTabela.getSelectedIndex())
			  {
			   
			  case 0:{   
				  
				  strTabela="Computador";
				  
				    CombComputador.setVisible(true);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(false);
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strTabela="Impressora";
				   CombComputador.setVisible(false);
					CombImpressora.setVisible(true) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(false);
			  
			   break;
			  }	
			  case 2 :{
				  
				  strTabela="Ocorrencia";
				  CombComputador.setVisible(false);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(true);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(false);
			  
			   break;
			  }	
			  case 3 :{
				  
				  strTabela="Nextel";
				  CombComputador.setVisible(false);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(true) ;
					CombEvento.setVisible(false);
			  
			   break;
			  }	
			  case 4 :{
	  
				  strTabela="Evento";
				  CombComputador.setVisible(false);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(true);
  
				  break;
			  }
		}
			  }
		});
		
		
		CombComputador= new JComboBox();
		CombComputador.setVisible(false);
		CombComputador.addItem(" Nome do PC");
		CombComputador.addItem(" Usuario");
		CombComputador.addItem(" Configuração do PC");
		CombComputador.addItem(" Setor");
		CombComputador.addItem(" Proprietário");
		CombComputador.setBounds(215,52,150,20);
		CombComputador.setSelectedIndex(-1);
		CombComputador.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
				
			  switch(CombComputador.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Nome do PC";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Usuario";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Configuração do PC";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }
			  case 4 :{
				  
				  strCondicao="Proprietario";
			  
			   break;
			  }
		}
			  }
		});
		
		
		CombImpressora = new JComboBox();
		CombImpressora.setVisible(false);
		CombImpressora.addItem(" Marca");
		CombImpressora.addItem(" Modelo");
		CombImpressora.addItem(" IP");			
		CombImpressora.addItem(" Setor");	
		CombImpressora.setBounds(215,52,150,20);
		CombImpressora.setSelectedIndex(-1);
		CombImpressora.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombComputador.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Marca";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Modelo";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="IP";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }
			  }
			  }});
		
		CombOcorrencia = new JComboBox();
		CombOcorrencia.setVisible(false);
		CombOcorrencia.addItem(" Usuario");
		CombOcorrencia.addItem(" Setor");
		CombOcorrencia.addItem(" Data do Problema");
		CombOcorrencia.addItem(" Data da Resolução");
		CombOcorrencia.addItem(" Situação");
		CombOcorrencia.setBounds(215,52,150,20);
		CombOcorrencia.setSelectedIndex(-1);
		CombOcorrencia.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombOcorrencia.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Usuario";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Data do Problema";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Data da Resolução";
			  
			   break;
			  }
			  case 4 :{
				  
				  strCondicao="Situação";
			  
			   break;
			  }
		}
			  }
		});
		
		
		CombNextel = new JComboBox();
		CombNextel.setVisible(false);
		CombNextel.addItem(" Nome");		
		CombNextel.addItem(" Setor");
		CombNextel.addItem(" Unidade");
		CombNextel.addItem(" Modelo");
		CombNextel.addItem(" Número");
		CombNextel.addItem(" Status");
		CombNextel.setBounds(215,52,150,20);
		CombNextel.setSelectedIndex(-1);
		CombNextel.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombNextel.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Nome";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Unidade";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Modelo";
			  
			   break;
			  }
			  case 4 :{
				  
				  strCondicao="Número";
			  
			   break;
			  }
			  case 5 :{
				  
				  strCondicao="Número";
			  
			   break;
			  }
		}}});
		
		
		CombEvento= new JComboBox();
		CombEvento.setVisible(false);
		CombEvento.addItem(" Titulo");
		CombEvento.addItem(" Data");
		CombEvento.addItem(" Status");
		CombEvento.setBounds(215,52,150,20);
		CombEvento.setSelectedIndex(-1);
		CombEvento.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombEvento.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Nome";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Unidade";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Modelo";
			  
			   break;
			  }
			  }}});
		
		getContentPane().add(LConsult);
		getContentPane().add(txConsult);
		getContentPane().add(BtConsultar);
		getContentPane().add(BtAlterar);
		getContentPane().add(BtExcluir);
		getContentPane().add(CombTabela);
		getContentPane().add(CombComputador);
		getContentPane().add(CombImpressora);
		getContentPane().add(CombOcorrencia);
		getContentPane().add(CombNextel);
		getContentPane().add(CombEvento);
		
		setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==BtConsultar)
		{	
			
			
			
			
				try
		    	{  
								
		    		Class.forName("com.mysql.jdbc.Driver");  
		    		conexao = DriverManager.getConnection("jdbc:mysql://localhost/prol","root", "");  
		    		   
		    		meuState = conexao.createStatement();
		    		
		    		if(strTabela=="Computador")
		    		{
		    			
		    		rs = meuState.executeQuery("select nome,usuario,configuracao,setor,proprietario,observacao from Computador where "+ strCondicao +"='"+txConsult.getText()+"'");
		    		
		    		dados = new ArrayList();				 
					
					colunas = new String[]{"nome","usuario","configuracoes","setor","proprietario","observacao"};   		    		
	    			
	    			
					while (rs.next()){
		    			A = (rs.getString("nome"));
		    			B = (rs.getString("usuario"));
		    			C = (rs.getString("configuracao"));	    		 				
		    			D = (rs.getString("setor"));
		    			E = (rs.getString("proprietario"));
		    			F = (rs.getString("observacao"));	    
		    		
		    			//ADICIONAR NO MODELO
		    			
		    			 dados.add(new String[] { A,B,C,D,E,F });  
		    		}
		    		AddTablePanel();
		    	
		    		
		    		}
		    		else if (strTabela=="Evento")
		    		{
						 System.out.println("epkapekpekep");

		    		rs = meuState.executeQuery("select titulo,data from evento where status='pendente'");
		    			    		
		    		while (rs.next()){
		    		//	A = (rs.getString("titulo"));
		    		//	B = (rs.getString("data"));
		    		//	JOptionPane.showMessageDialog(null,A+B);
		    		 
		    		
		    			//ADICIONAR NO MODELO
		    			
		    		}
		    		
		    	
		    	
		    			
		    		}
		    		
		    		try {
						 
		    			conexao.close();
						 
						} catch (SQLException ex) {
						
						 System.out.println("Não foi possível fechar a conexão!");
						 }
		    		
		    		
		    	}
				
		    	catch(ClassNotFoundException ex)
		        {
		            System.out.println("Driver JDBC-ODBC não encontrado!");
		        }
		        catch(SQLException ex)
		        {
		            System.out.println("Problemas na conexao com a fonte de dados");
		        }  
		    	

			}
		 }	
		
	
	

		public void AddTablePanel()
		{	 
			ConsultTableModel modelo = new ConsultTableModel(dados, colunas);			    
		  	JTable jtable = new JTable(modelo); 
			jtable.setBounds(50,100,550,300);
			JScrollPane jp= new JScrollPane(jtable);
			jp.setBounds(50,100,550,300);
			getContentPane().add(jp);
			
		}
		
		public static void main (String args[])
		{
			
			new Consultar();
		}
	}
			

e a tablemodel


package programa;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class ConsultTableModel extends AbstractTableModel{

	private ArrayList linhas = null;  
    private String [] colunas = null;  
    
    public String[] getColunas() 
    {
    	return colunas;
    }  
    public ArrayList getLinhas()
    {
    	return linhas;
    }
    
    public void setColunas(String[] strings)
    {
    	colunas = strings;
    }  
    public void setLinhas(ArrayList list) 
    {
    	linhas = list;
    }
    
    public int getColumnCount() 
    {
    	return getColunas().length;
    }  

    public int getRowCount()
    {
    	return getLinhas().size();
    }  
    
    public Object getValueAt(int rowIndex, int columnIndex) 
    {  
        String [] linha = (String [])getLinhas().get(rowIndex);  
        return linha[columnIndex]; 
    }
	
    public ConsultTableModel(ArrayList dados, String[] colunas){  
        setLinhas(dados);  
        setColunas(colunas);  
    } 
    
    @Override  
    public String getColumnName(int col)
    {  
       return colunas[col];  
    }  
   
    
    	}
    
	  

Primeira vez que mexo com table, to apanhando pra caramba com isso ainda… :cry:
valeu.

tarlix,
seu código tá meio confuso…vc não dá refresh em nenhum momento se vc repopula a JTable?E se vc precisa tanto de uma JTable navegável, pq não faz algo desse tipo:

import javax.swing.table.AbstractTableModel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class ConsultTableModel extends AbstractTableModel{
 private static final long serialVersionUID = -27341192279570380L;
	private Connection conexao;
	private Statement statement;
	private ResultSet resultSet;
	private ResultSetMetaData metaData;
	private int linhas;
	private String query;

	public ConsultTableModel(Connection con, String query) throws SQLException, ClassNotFoundException{
              conexao=con;
         statement = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY );
			// set query and execute it
			setQuery( query );
	}

			// get class that represents column type
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public Class getColumnClass( int column ){
				// determine Java class of column
				try {
	String className =metaData.getColumnClassName( column + 1 );
					// return Class object that represents className
					return Class.forName( className );
				}
				catch ( Exception exception ) {
					exception.printStackTrace();
				}
				// se ocorrer um problema, assume o tipo Object
				return Object.class;
			}

			// pega o número de colunas no ResultSet
			public int getColumnCount(){
			// determina o número de colunas
			try {
				return metaData.getColumnCount();
			}
			catch ( SQLException sqlException ) {
				sqlException.printStackTrace();
			}
				// se houver problemas, retorna o valor 0 para número de colunas
				return 0;
			}
			// pega o nome de uma coluna no ResultSet
			public String getColumnName( int column ){
			// determina o nome da coluna
				try {
					return metaData.getColumnName( column + 1 );
				}
				catch ( SQLException sqlException ) {
					sqlException.printStackTrace();
				}
				// dando problema, retorna uma string vazia para o nome da coluna
				return "";
			}
			//Retorna o tipo de Dados
			// pega o nome de uma coluna no ResultSet
			public String getColumnTypeName( int column ){
			// determina o tipo de dados da coluna
				try {
					return metaData.getColumnTypeName( column + 1 );
				}
				catch ( SQLException sqlException ) {
					sqlException.printStackTrace();
				}
				// dando problema, retorna uma string vazia para o tipo da coluna
				return "";
			}
			//-----------------------
			// Retorna a linha de uma string em uma determinada coluna
			public int getNumberLineString (String str, String campo){
				int linha = -1 ;
				int NumLinhas = -1 ;
				int NumCol = -1 ;
				String stexto ;
				for (int i=0;i<getColumnCount();i++){
					stexto = getColumnName( i ).toString();
					if (stexto.equals(campo)){
						NumCol = i;
					}
				}
				try {
				   NumLinhas = resultSet.getRow() ;
				}
				catch (SQLException ex){ex.printStackTrace();}


				for (int i=0;i<NumLinhas && NumCol != -1 ;i++){
					//stexto = getValueAt( i, NumCol ).toString();
					if (str.equals(getValueAt( i, NumCol ))){
						return i ;
					}
				}
				return linha ;
			}

			protected void finalize(){
				// fecha Statement e Connection
				try {
					statement.close();
					//conexao.close();
				}
				catch ( SQLException sqlException ) {
					sqlException.printStackTrace();
				}
			}

			// retorna o número de linhas no ResultSet
			public int getRowCount(){
				return linhas;
			}

			// obtém valores em particular linhas e colunas
			public Object getValueAt( int row, int column )	{
				// obtém um valor de uma específica linha e coluna do ResultSet
				try {
					resultSet.absolute( row + 1 );
					return resultSet.getObject( column + 1 );
				}
				catch ( SQLException sqlException ) {
					sqlException.printStackTrace();
				}
				return "";
			}
			//atualiza JTable em caso de alterações nos dados
			public void refresh()throws SQLException{
				setQuery(query);
			}

			// cria uma nova query
			public void setQuery( String qry ) throws SQLException{
					query=qry;
					// especifica e executa a query
					resultSet = statement.executeQuery( qry );
					metaData = resultSet.getMetaData();
					// determina o número de linhas em um ResultSet
					resultSet.last(); // move para a última linha
					linhas = resultSet.getRow(); // pega o número da linha
					// notifica JTable das alterações
					fireTableStructureChanged();
			}
			public void setDelete( String qry ) throws SQLException{
					query=qry;
					// especifica e executa a query
					resultSet = statement.executeQuery( qry );
			}
			public String getQuery(){
				return query;
			}


} // Fim classe ConsultTableModel

Não é das melhores práticas, mas dá para lidar bem com os dados na JTable que vc quer exibir(desde que não sejam dezenas de milhares).>

Ironlynx, eu consegui enter bem pouco no seu codigo, eu tava tentando pegar o esquema de criar um tablemodel mas desse jeito que voce fez puxando do BD direto eu nao entendi.

Tipo vou tentar resumir o meu codigo:
Eu tenho um frame e nele eu tenho 6 combobox, no primeiro são as tabelas que possuem no programa: “computador, ocorrencia, nextel, evento e impressora” sao os itens.
quando eu escolher um desses itens eu vou ter o meu select indicando de qual tabela eu estou procurando.

Nos outros combos sao referentes a tabela selecionada, por exemplo na tabela impressora teria o ip, setor, modelo, e marca, isto seria o “where” do meu select e o text field o final do where.

exemplo: select * from (tabela) impressora where (segundo combo)ip = 192.168.0.0b[/b] -> desconsidere o que está em negrito.

Bom, ai o que eu quero? vamos supor que eu fiz uma consulta dando como parametro o setor = almoxarifado. depois quando eu vou buscar setor = TI, ele tá puxando direitinho, mas qdo eu clico em uma celula e volta a aparecer os dados do almoxarifado.

No modelo que eu criei eu enviaria a quantidade de colunas que tem na tabela. Meu problema está com o preenchimento da tabela depois que eu preencho a primeira vez.
E isso de dá “refresh” q voce falou, eu nao sei como fazer…

Como disse, é a primeira vez que mexo com jtable e tablemodel.
Pelo que pesquisei na net, a inserção é feita pelo modelo e atualizada, e no meu codigo está sendo feito no proprio Consultar e inserindo o valor:

Como eu poderia fazer para atualizar a Jtable para que ela recebesse uma nova quantidade de colunas e novos valores das linhas sem ficar por “tras” da nova tabela?

Obrigado.

tarlix,
a classe que te passei não é de difícil entendimento.Dá uma lida no JTable tutorial da oracle sobre tablemodels.
Vc pode iniciar o model que te passei com um conjunto de dados do BD, tipo:

 tabelaModel =ConsultTableModel(SuaConexao.getConnection(), queryDeConsultaQueVcQuerIniciarCarregada)
//passa o model para jtable
if (jTable == null) {
jTable = new JTable(tabelaModel);
//faz alguma coisa...ou vc pode deixar um construtor vazio ou algo assim

e mudar a consulta com um setQuery:

[quote]No modelo que eu criei eu enviaria a quantidade de colunas que tem na tabela. Meu problema está com o preenchimento da tabela depois que eu preencho a primeira vez.
E isso de dá “refresh” q voce falou, eu nao sei como fazer…[/quote]
Vc precisa de um método de atualização no seu model, que notificará que ocorreu uma atualização na sua tabela, chamando o método fireTableRowsUpdated.

Dê uma olhada com cuidado no tópico abaixo(veja as dicas do ViniGodoy):
http://www.guj.com.br/java/245178-alterar-e-excluir-dados-de-jtable-com-abstractmodeltable-no-banco-de-dados

Cara, consegui fazer a atualizacao das linhas da Jtable, mas sem usar esse modelo que voce fez, consegui fazer do jeito que eu tava fazendo, sem puxar do sql direto. Mas como eu faria para trocar o numero de colunas agora?
por exemplo:

Na primeira vez que carrega, ele tem 6 colunas.
mas na segunda consulta ele passaria a ter 4 colunas. como eu poderia falar pro modelo fazer isso?

aki tá o codigo do modelo:


package programa;

import java.util.ArrayList;

public class ConsultTableModel extends AbstractTableModel{

	private ArrayList linhas = new ArrayList ();  
    private String [] colunas = null;  
    
    public String[] getColunas() 
    {
    	return colunas;
    }  
    public ArrayList getLinhas()
    {
    	return linhas;
    }
    
    public void setColunas(String[] strings)
    {
    	colunas = strings;

    }  
    public void setLinhas(ArrayList list) 
    {
    	linhas = list;
    }
    
    public int getColumnCount() 
    {
    	return getColunas().length;
    }  

    public int getRowCount()
    {
    	return getLinhas().size();
    }  
    
    public Object getValueAt(int rowIndex, int columnIndex) 
    {  
        String [] linha = (String [])getLinhas().get(rowIndex);  
        return linha[columnIndex]; 
    }
	        
    @Override  
    public String getColumnName(int col)
    {  
       return colunas[col];  
    }  
    
    
    public void addRow( String [] dadosLinha)
    {  
    	    getLinhas().add(dadosLinha);      	  
    	    int linha = getLinhas().size()-1;  
    	    fireTableRowsInserted(linha,linha);  
    	    return;  
   	}
    
    public void LimpaConsult()
	{
		linhas.clear();
		
		fireTableDataChanged();
				
	}
    
    public ConsultTableModel(String[] colunas){  
        
        setColunas(colunas);  
    } 
       
   
    
    	}

eu tentei fazer assim, mas nao sei se ta certo, nem como faria para chamar este metodo:

[code]
public void AlterarColunas (String[] colunas)
{

	setColunas(colunas);
	fireTableStructureChanged();
}[/code]

valeu pela ajuda.

Eu consegui colocar o novo numero de colunas. O problema que eu percebi é que quando eu insiro uma nova linha todos os dados ficam com o mesmo valor.

Na primeira vez que passa pelo while (rs.next()){ ele inseri os valores certinhos, por exemplo:

coluna A | coluna B | coluna C |
teste | teste | teste |

ai quando vai a segunda vez, vamos supor que ele iria inserir teste2, o certo seria ficar abaixo do “teste” mas ele coloca abaixo do “teste” e o transforma em teste2 também, ou seja, fica tudo preenchido com teste2 =/

Eu uso dessa maneira e assim faço o refresh direto.
Espero que ajude

String[] colunasTabela = new String[]{"Cepa", "Estresse", "Gene", "Inicio", "Fim", "Status", "Produto", "RPKM", "PRPKM", "TranscriptID"};
        DefaultTableModel modeloTabela = new DefaultTableModel(null, colunasTabela);
        jTable1.setModel(modeloTabela);
        try {
            bd = new Bd();
            bd.conecta();
            Consulta teste = new Consulta();
            ResultSet rs = teste.consultar(fim, 1, bd);
            String salvando = "Cepa" + "\t" + "Estresse" + "\t" + "Gene" + "\t" + "Inicio" + "\t" + "Fim" + "\t" + "Status" + "\t" + "Produto" + "\t" + "RPKM" + "\t" + "PRPKM" + "\t" + "TranscriptID" + "\n";
            while (rs.next()) {
                modeloTabela.addRow(new String[]{
                            rs.getString("c.cepa"),
                            rs.getString("b.descricao"),
                            rs.getString("a.gene"),
                            Integer.toString(rs.getInt("a.genestart")),
                            Integer.toString(rs.getInt("a.geneend")),
                            rs.getString("a.status"),
                            rs.getString("a.product"),
                            rs.getString("a.rpkm"),
                            rs.getString("prpkm"),
                            rs.getString("a.transcriptid")
                        });
            }
            bd.conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

Então, o problema não é em fazer refresh, até pq eu coloquei um joptionpane em cada iteração para ver o que ia mudando.
e a primeira linha que devia aparecer, aparece normalmente, mas ai qdo puxa a segunda linha ela aparece na primeira e na segunda linha.

[URL=http://imageshack.us/photo/my-images/17/imagemjava1.jpg/][/URL]

nessa primeira imagem seria um select * from [tabela] eu coloquei um Joptionpane pra parar a iteração e eu poder tirar o print.

na segunda imagem, é o resultado final, ou seja seria inserida mais 1 linha e ficaria a primeira linha sendo a imagem anterior e a segunda linha essa imagem abaixo, entretando, as duas linhas ficam iguais.

[URL=http://imageshack.us/photo/my-images/850/imagejava2.jpg/][/URL]

Alguem tem alguma ideia do que possa ser? não faço a minima ideia o que poderia estar causando esse problema…