java.lang.ArrayIndexOutOfBoundsException

Sou novo em desenvolvimento com java, e gostaria de saber como solucionar o problema do codigo abaixo.

Tenho uma string no banco(oralce) em formato clob, e estou separando os pares de coordenadas delimitada por ";’. Ao chegar em uma determinada posição no for e apresentado a mensagem abaixo:

java.lang.ArrayIndexOutOfBoundsException: 25683

Segue o codigo:

Metodo mein
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package quebar.linha;

import java.sql.SQLException;
import java.util.Arrays;

public class QuebarLinha {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws SQLException {
    Conexao cn = new Conexao();
    String retorno;
    
    retorno=cn.PesquisarUsuario();
    
    System.out.println("Quantidade " +retorno.length());
    
    for ( int r =0;r<retorno.length()-1;r++){
      int cont =r;
        String[] dados ;
        dados=retorno.split(";");
        if(dados[r]!=" "&&dados[r]!=null)
         System.out.println("Contador"+cont);
        System.out.println("Vai para o banco "+dados[r]);
       
        //cn.inserir(dados[x], x);
      
        
    }
    
    
}

}

Classe que conecta no banco:

package quebar.linha;

import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conexao {

private Connection conexao;  

public Connection getConnection(){
try{
Class.forName(“oracle.jdbc.OracleDriver”);
conexao = DriverManager.getConnection( “jdbc:oracle:thin:@S333-PRODABEL:1521:HML001”,“ARTERH_PBH”,“arte”);
System.out.println("Conectado Ao banco ");
}
catch(ClassNotFoundException | SQLException e){

       System.out.println("erro ");
   }  
   return conexao;  

}

    public String PesquisarUsuario() throws SQLException{  
        
        conexao = getConnection();
       String dados;
    
    String selecao ="SELECT lista FROM teste_regional where id =2 ";
    Statement stm;
    stm= conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    ResultSet rs=stm.executeQuery(selecao);
    rs.first();
        
        dados=rs.getString(1);
        
       
        
    return dados;
   

}
 public void inserir(String dados,int contador ){
  
  
  String selecao ="insert into bh(lista,id)values(?,?)";
  Statement stm;
    try {
        PreparedStatement stmt = conexao.prepareStatement(selecao);
          stmt.setString(1,dados);
         stmt.setInt(2,contador);
         stmt.execute();
         stmt.close();
        
    } catch (SQLException ex) {
        ex.printStackTrace();
        Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
    }

 }   

}

Desde já agradeço

  • Item da lista

Objetos do tipo String devem ser comparados com equals, assim:

if (dados[r] != null && !dados[r].equals(" "))

Em certo momento vc cria um array e o preenche com um split:

dados=retorno.split(";");

Até aí, tudo certo, só que abaixo, vc tenta ler o conteúdo desse array usando a variável “r”:

if(dados[r]!=" "&&dados[r]!=null)

Só que "r’ é o índice dos registros no banco que vc leu, não dos itens do array que você criou, por isso em algum momento ocorre a exceção, pois ele tenta ler um item do array que não existe.