ERRO na estrutura do For

Galera, tenho essa estrutura q pega uma JTable toda preenchida e percorre todas as linhas dessa tabela mandando os dados pro BD, só q dá um ERRO no For, esse erro aqui: java.lang.ArrayIndexOutOfBoundsException: 2>=2
A estrutura ta aqui:

O que pode estar acontecendo???


        int linhas = tabelaCompras.getRowCount();   //recebe a quantidade de linhas da tabela
         
String produto,unitario,quantidade,total,codigoProduto;     //variáveis q irão receber os valores da tabela e mandar pro BD
 
        for(int i=0;i<=linhas;i++){       //enquanto houver linha na tabela vai recuperando o valor através da linha e coluna e mandando pro BD
            
            produto       = tabelaCompras.getValueAt(i,0).toString();
            unitário        = tabelaCompras.getValueAt(i,1).toString();
            quantidade= tabelaCompras.getValueAt(i,2).toString();
            total              = tabelaCompras.getValueAt(i,3).toString();
            codigoProduto = tabelaCompras.getValueAt(i,4).toString();
           
            try{
            String sqlinsert = "insert into ItemVenda(codigoVenda,codigoProduto,unitario,quantidade,total) values ('"+
                    codigoProduto+"','"+
                    unitario+"','"+
                    quantidade+"','"+
                    total+"')";

            con_item.statement.executeUpdate(sqlinsert);
            con_item.executeSQL("select * from ItemVenda");
            con_item.resultset.next();

        }

            catch(SQLException erro){
            JOptionPane.showMessageDialog(null, "Erro ao gravar o Registro! "+erro);
            }
        }//final do for
        JOptionPane.showMessageDialog(null,"Listagem realizada com sucesso!");





for(int i=0;i&lt;linhas;i++){ >

Corrija igual ao colega de cima falou.

Entretanto, eu apontaria outros problemas no seu código:

  1. Você deve pedir ao seu model um produto inteiro, e não usar o getValueAt para ler campo por campo;
  2. Você deve colocar sua SQL numa classe DAO, e não deixar horrívelmente misturado com sua interface gráfica;
  3. Aquele último select faz pouco sentido, além de ser um atentado a performance. No mínimo ele deveria restringir o número de registros retornados;
  4. Seus números de coluna estão hardcoded. Isso por si só é uma péssima prática. Felizmente, a dica 1 já elimina esse problema.
  5. Você deve usar PreparedStatement, e não concatenar Strings para montar SQL.
  6. Você deve manter ResultSets, Statements e Connections fechadas, preferencialmente dentro de um finally.

A maior parte desses problemas é grave.