[RESOLVIDO] Erro ao finalizar venda

Boa eu estou com esse código para transformar o textfield do nomecliente para código do cliente e mandar no banco só que tou com esse
erro na classe acha cliente

java.sql.SQLException : Operation not allowed after resulSet closed

e esse erro na hora de salvar

jdbc4.mysqlintegrityConstraintviolationException: Cannot add or update a child row: a foreign key constraint fails ('controlsystem', CONSTRAINT 'CodCliente' Foreign Key ('CodCliente') REFERENCES 'tb_cadcliente' ('CodCliente') ON DELETE NO ACTION ON UPDATE NO ACTION)

 Desde já agradeço
   public void FinalizaVenda(ModeloVenda mod){
        AchaCliente(mod.getNomeCliente());
        conecta.conexao();
        try {
            PreparedStatement ps = conecta.con.prepareStatement("update tb_cadvenda set datavenda=?, valor_total_venda=?, Valor_Desc=?,CodCliente=? where CodVenda=?");
            ps.setString(1, mod.getDatavenda());
            ps.setFloat(2, mod.getValortotal());
            ps.setFloat(3, mod.getDesconto());
            ps.setInt(4, CodCLiente);
            ps.setInt(5, mod.getCodVenda());
            ps.execute();
            JOptionPane.showMessageDialog(null, "Venda FInalizada");
        } catch (SQLException ex) {
      JOptionPane.showMessageDialog(null, "Erro ao finalizar venda " + ex);
        }
       conecta.desconecta();
    }
    public void AchaCliente(String nome){
        conecta.conexao();
        try {
            PreparedStatement ps = conecta.con.prepareStatement("select * from tb_cadcliente where Nome'"+nome+"'");
            conecta.rs.first();
            CodCLiente = conecta.rs.getInt("CodCliente");
        } catch (SQLException ex) {
         JOptionPane.showMessageDialog(null, "Erro ao Achar Cliente " + ex);
        }
       conecta.desconecta();
    }

O codCliente nao existe por isto este erro de FK. Vc ta tentando salvar um codCliente na tabela de venda mas o mesmo não existe na tabela cliente a qual as duas tem relação.

eu fiz o teste e parece que está corretamente a chave estrangeira o problema parece que está na função para pegar o código do CodCliente com o nome dele, que é essa função desde já agradeço

public void AchaCliente(String nome){
conecta.conexao();
try {
PreparedStatement ps = conecta.con.prepareStatement(“select * from tb_cadcliente where Nome’”+nome+"’");
conecta.rs.first();
CodCLiente = conecta.rs.getInt(“CodCliente”);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Achar Cliente " + ex);
}
conecta.desconecta();
}

eu agradeço eu consegui passar a função
PreparedStatement ps = conecta.con.prepareStatement(“select * from tb_cadcliente where Nome’”+nome+"’");

não deveria passar a preparedStatement mas sim
conecta.executaSQL(“select * from tb_cadcliente where Nome=’”+nome+"’");

Obrigado pela ajuda

Aconselho usar desta forma seu preparestatement :

PreparedStatement ps = conecta.con.prepareStatement("select * from tb_cadcliente where nome = ?");
ps.setString(1,nome);

Passagem de parametro p/ PrepareStatement, outros tipos de setar parameter https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html

Obrigado pela ajuda RaulCrash eu fiz um e mandei
public void executaSQL(String sql){
try {
stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY);
rs = stm.executeQuery(sql);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro no ExecutaSQl!\n Erro: "+ ex.getMessage());
}
}